Numpy: flatten

numpy.flatten(order='C')

将数组的副本(不更改原始数据)转换为一维,简单理解就是把数组拉平拉直
options order={'C', 'F', 'A', 'K'}

  • 'C': C-style, 行为主要顺序,先从左到右,再从上到下,默认是**'C'**
  • 'F': Fortran-style, 列为主要顺序,先从上到下,再从左到右
  • 'A':如果a是Fortran在内存中连续的,那么'A' 意味着以列主要顺序变平,否则按行排序
  • 'F':按照元素在内存中出现的顺序来拉平a
    常用的是前两个,记录如下

二维数据

import osimport numpy as np
# 随机生成一个2维数组,4行3列arr1 = np.random.randint(1, 10, size=[4, 3])arr1
array([[9, 8, 5],[3, 2, 5],[8, 7, 4],[5, 9, 2]])
# 查看数组1的维数arr1.ndim
2
# 将数组arr1以行为主要顺序进行拉平降维arr2 = arr1.flatten()arr2
array([9, 8, 5, 3, 2, 5, 8, 7, 4, 5, 9, 2])
# 此时查看数组arr2的维数,可以看到现在已经从2维降到了1维arr2.ndim
1
arr1.shape
(4, 3)
# 将数组arr1以列为主要顺序进行拉平降维arr3 = arr1.flatten(order='F')arr3
array([9, 3, 8, 5, 8, 2, 7, 9, 5, 5, 4, 2])
# 查看此时的数组维度arr3.ndim
1

三维数据

因为经常接触到的数据一般都是栅格影像数据,而栅格影像一般都是三维数据,比如常见的landsat影像,都是包含多个波段的,我们可以随机构建一个三维的数据

# 随机创建一个3维的数组arr4 = np.random.randint(1, 10, size=[4, 3, 3])arr4
array([[[6, 7, 3],[5, 1, 7],[5, 4, 6]],[[8, 5, 2],[9, 4, 3],[6, 9, 9]],[[9, 9, 2],[2, 2, 8],[5, 5, 3]],[[3, 1, 2],[4, 6, 1],[8, 3, 5]]])

对于这个随机的三维数组如果联系上栅格影像可以这样理解,这是一个具有四个波段的影像,每个波段的长宽都是3,也就是3*3 包括我们平常用gdal和rasterio等包去读取影像获取其值时得到的也是如此的数组,每个波段都可以看作一层,有几个波段就是几层

# 对arr4进行以行为主就行降维arr5 = arr4.flatten()arr5
array([6, 7, 3, 5, 1, 7, 5, 4, 6, 8, 5, 2, 9, 4, 3, 6, 9, 9, 9, 9, 2, 2,2, 8, 5, 5, 3, 3, 1, 2, 4, 6, 1, 8, 3, 5])

可以看到,对于三维数组,在以行为主时和二维时一样,都是从左到右,从上到下的顺序

# 对arr4进行以列为主就行降维arr6 = arr4.flatten(order='F')arr6
array([6, 8, 9, 3, 5, 9, 2, 4, 5, 6, 5, 8, 7, 5, 9, 1, 1, 4, 2, 6, 4, 9,5, 3, 3, 2, 2, 2, 7, 3, 8, 1, 6, 9, 3, 5])

但是在以列为主进行降维时,与二维时有些不同,我们对比着前面的arr4看,因为这涉及到numpy的轴的原因,三维时可以理解为存在一个x,y,z三个轴的坐标系 假设3*3构成的数组是x,y轴,然后在z轴上分布着4层,此时以列为主就是以z轴为主,之后再回到了二维上从上到下,从左到右

结尾

以上所有内容只是我个人见解,如果有误请哥哥姐姐们指正,幼儿园的车要送我回家了,拜拜!

公众号:壹贰叁言

随笔记录,欢迎唠嗑

本文由 mdnice 多平台发布

Numpy:关于flatten的理解相关推荐

  1. Numpy中flatten与ravel的区别

    Numpy中flatten与ravel的区别 看到在看到numpy文档的时候看到两个非常相似的方法,即flattenflattenflatten和ravelravelravel,两个函数的功能十分接近 ...

  2. 图解NumPy,这是理解数组最形象的一份教程了

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 转自:深度学习初学者 作者:Jay Alammar 本文用可视化的方 ...

  3. Numpy高维数据的理解

    当实际处理多维变量时,尤其需要使用到Tensorflow这样深度学习库,比如,图片数据批次其形状为:N×H×W×CN×H×W×C, 高维序列格式存在难以理解的问题.因此如何读懂这些高维序列是一个很基础 ...

  4. Numpy cov() 函数的理解

    该函数用来求协方差矩阵 numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None) 第 ...

  5. NumPy 的 nan 如何理解?

    Python与算法社区 第439篇原创,干货满满 值得星标 01 02 03 三步加星标 你好,我是 zhenguo Python 中表示空数据使用 None,它是 NoneType 类型,如下所示: ...

  6. 关于python numpy.quantile()方法的理解以及分位数的理解

    近期在编写python代码的时候遇到了python的numpy包中的quantitle()方法,产生了困惑,没有明白其得到的是什么,查阅之后发现,其实意思是分为数的意思,里面的参数q如果传入的是一个值 ...

  7. python numpy之argmax()方法理解

    1.numpy之argmax()作用 返回相应维度axis上的最大值的位置. 2.具体应用 深度学习图像分割多分类最后是softmax得分结果,我们需要将这个浮点型的结果保存成整型的标签图像,这样才算 ...

  8. numpy中flatten()和ravel()

    在numpy包中,flatten()和ravel()函数都能将多维数组降为一维,区别在于numpy.flatten()返回是拷贝,对拷贝所做的修改不会影响原始矩阵,而numpy.ravel()返回的是 ...

  9. 关于numpy数组shape的理解 比如:(3,) (2,3) (2,3,2) 以及对维度的小认识

    shape大概有3种 ------------------------------ (2,) 有一个数字,表示数组只有1个维度 '2'说明有这个维度上有2个元素 array = np.array([9 ...

最新文章

  1. AnsiToUtf8 和 Utf8ToAnsi
  2. Python2安装教程(以最终版本Python2.7.18为例)
  3. Cissp-【第3章 安全工程】-2021-2-23(290页-321页)
  4. php k线图 echarts,利用ECharts.js画K线图的方法示例
  5. 部署Apache服务器
  6. Angular 应用里的 vendor.js 是用来干什么的?
  7. 第一百三十二期:MySQL系列:一句SQL,MySQL是怎么工作的?
  8. 揭秘 | 双11逆天记录背后的数据库技术革新
  9. UIScrollView autolayout
  10. 根据类名找jar包findjar.com
  11. Python网络编程【客户端与服务器通信】
  12. BZOJ 1067 降雨量(RMQ-ST+有毒的分类讨论)
  13. 机器学习 | MATLAB实现GLM广义线性模型参数设定
  14. Docker部署微服务应用笔记(三)
  15. 基于Java毕业设计房屋租赁系统源码+系统+mysql+lw文档+部署软件
  16. 在MacOS上安装MacTex
  17. 集群监控:Ambari和Cloudera Manger
  18. 3G门户手机浏览器试用感受
  19. TestNG修改reportNG输出description
  20. android进度条随时间走,每天一点Android干货-时间与日期、进度条

热门文章

  1. 伤寒论文本搜索(grep)
  2. 线段树开4N空间证明
  3. RT-Thread在16届智能车竞赛双车接力组中的应用
  4. Gitlab----Pipline流水线语法only、except、rules、workflow
  5. Windows无法访问\\请检查名称的拼写。否则,网络可能有问题。错误代码:0x80070053网络路径键入不正确、不存在或者网络提供程序当前不可用。请尝试键入路径或与网络管理员联系
  6. 洛谷 P2404 自然数的拆分问题C语言
  7. 谷歌账户无法添加_如何将多个Google帐户添加到Google Home
  8. 蓝桥ROS机器人之古月居ROS入门21讲
  9. C语言编程>第十三周 ⑧ 已知学生的记录由学号和学习成绩组成,M名学生的数据已存入stu结构体数组中。请编写函数fun,该函数的功能是:
  10. 趣味测试小程序源码带流量主广告位开源小程序