基础 | numpy ndarray 之内功心法,理解高维操作!
多维数据的形象表示
检查一个 ndarray 数据的维度和大小,分别用 ndim 和 shape 属性。
shape 是一个很关键的属性,我是这样把它和各个轴对应的:
心法1: x, y, z 对应的shape元组是从右往左数的。
这是我的个人习惯,也符合主流的用法。
图像数据的小误会
打开一幅 640 x 480 的图像:
不是 640 x 480 吗, 怎么倒过来了?我写代码的时候在这里总是犯迷糊。
在口头表达中,我们先说宽640,再说高480,而在计算机中是先高(y) 后宽(x),注意了!
每个像素有三个颜色分量(color),所以这个维度放在了最右边,可以理解,顺序就是 (y, x, c)
抽象轴上的操作
对于4维及更高维度的数据,无法在3维空间图示。这个时候,就不要考虑形象思维了,直接按照规则做处理。
用 shape 属性返回的元组,从左到右,座标轴分别命名为 axis 0, axis 1, ...,请注意,现在是从左向右数,正好是这个元组的 index,在以后的运算中,都按此规定。
心法2: 抽象座标轴顺序从左向右。指定哪个轴,就只在哪个轴向操作,其他轴不受影响。
排序(sorting)
如果你在心中能把抽象轴和 x, y, z 对应起来,则理解轴向排序很容易。
2. 求和、均值、方差、最大、最小、累加、累乘
这几个函数调用,一般会指定轴向,注意心法2
sum,mean,std,var,min,max 会导致这个轴被压扁,缩减为一个数值
cumsum,cumprod 不缩减轴向,只在指定轴向操作,请读者自己试验。
3. 索引和切片(indexing and slicing)
心法3: 在索引中出现冒号(:),则本轴继续存在,如果只是一个数值,则本轴消失。
例如,像 :, :1, 1: 这样的索引,保留此轴, data[:, :1, 2:] 中,三个轴都保留。 data[1, 4, 2] 三个轴都消失,只返回一个数值。
data[1:2, 0:1, 0:1] 中,三个轴都保留,但只有一个数据元素,很神奇吧。
如何查看 ndarray 的维度呢?可以访问 shape 属性;如果打印出来了,那么就数一数起始的中括号个数,比如 [[[6]]], 有三个 [,那么就是三维数组。你记住了吗?
4. 拼接(concatenating)
同样遵循心法2,指定哪个轴,就在哪个轴向拼接:
reshape 之迷乱
你有没有这个困惑:在 reshape 之后,数据在各个轴上是如何重新分配的?
搞清楚 ndarray 的数据在内存里的存放方式,以及各个维度的访问方式,reshape 困惑就迎刃而解了。
心法4: ndarray 的数据在内存里以一维线性存放,reshape 前后,数据没有变化,只是访问方式变了而已。
数据优先填充 X 轴向,其次 Y 轴,其次 Z 轴 。。。
有 C 语言基础的,很容易理解 ndarray 的实现,就是 C 中的多维数组而已。
总结
就说这么多,看了本文请亲自动手写代码体验一下。掌握此心法,可以纵横 numpy 世界而无大碍。
心法1: x, y, z 对应的shape元组是从右往左数的。
心法2: 抽象座标轴顺序从左向右。指定哪个轴,就只在哪个轴向操作,其他轴不受影响。
心法3: 在索引中出现冒号(:),则结果中本轴继续存在,如果只是一个数值,则本轴消失。
心法4: ndarray 的数据在内存里以一维线性存放,reshape 前后,数据没有变化,只是访问方式变了而已。
原文发布时间为:2018-09-20
本文作者:曲奇
本文来自云栖社区合作伙伴“磐创AI”,了解相关信息可以关注“磐创AI”。
基础 | numpy ndarray 之内功心法,理解高维操作!相关推荐
- Python基础——numpy.ndarray一维数组与多维数组
shape为(3, 1)(表多维数组)与shape为(3, )(表一维数组)用法上有很大的不同 >>> x = np.random.randn(3) >>> x a ...
- Numpy基础(part2)--ndarray数组
鄙人学习笔记,这个笔记以例子为主. 开发工具:Spyder 文章目录 ndarray数组对象的维度操作 视图变维(数据共享) 复制变维(数据独立) 就地变维 ndarray数组切片操作 多维数组的切片 ...
- 数据基础---numpy、pandas使用教程
数组对象 Numpy库 Numpy最重要的一个特点是就是其N维数组对象,即ndarray,ndarray是一个通用的同构数据多维容器,其中的所有元素必须是相同类型的.每个数组都有一个shape(一个表 ...
- python3 多维数组 NumPy ndarray 简介
目录 基础 重要属性 创建 Converting Python array_like Objects to NumPy Arrays 多维数组 一维 通用数学函数 基础 NumPy 的主要对象是齐次多 ...
- python数据分析 - numpy | ndarray数组 | numpy常用函数
文章目录 数据分析 numpy概述 numpy历史 numpy的核心:多维数组 numpy基础 ndarray数组 内存中的ndarray对象 ndarray数组对象的特点 ndarray数组对象的创 ...
- Python基础----NumPy
文章目录 NumPy - 简介 NumPy 操作 1.创建ndarray数组 1.1.基本的ndarray是使用 NumPy 中的数组函数创建 1.2.其他创建方法说明 1.3.numpy中的随机数生 ...
- python ndarray find_Python中Numpy ndarray的使用详解
python: numpy的ndarray和array有什么区别?为什么小编以为小编够坚强了,可还是敌不过你的执着你的冷酷. What is the difference between ndarra ...
- Numpy入门教程:03.数组操作
背景 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python.其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执 ...
- 利用Python中的numpy.ndarray.reshape()对阵列形状进行调整
我们在进行阵列运算的时候,常常要根据需要调整阵列的形状,numpy库中的函数reshape()可以方便地实现对阵列形状进行调整. 其函数原型如下: dst = numpy.ndarray.reshap ...
最新文章
- 【ACM】杭电OJ 1002
- 谁是AI行业最受关注的人?未来图灵发布《AI明星企业家热搜榜》
- elasticsearch v6.5.4配置
- word图片填充单元格
- Phonegap之内存问题
- 14项IgG样双特异性抗体工艺
- 动作基类 CCAction
- ocelot简单入门
- java 浏览器 爬虫_java 网络编程-爬虫+模拟浏览器
- veket linux软件下载6,veket linux官方
- linux下执行mysql的sql文件
- 关于 exynos 4412 按键中断 异步通知
- jQuery动画二级下拉菜单
- SM2258XT固态硬盘不认盘量产修复开卡工具,SM2258XT开卡教程
- Win7更换锁屏和开机画面
- 数学笔记11——微分和不定积分
- 复旦大学与国网上海共建“电力大数据实验室”
- 如何关闭任务栏中chrome浏览器的通知图标
- 人生中重要抉择:读研还是工作?
- Linux环境中安装zookeeper
热门文章
- ECharts 入门真的很简单
- 模拟电路--可编程数字稳压电源的设计
- 用单张2D图像重构3D场景
- 仿ios桌面vivo_vivo全新OriginOS细节曝光:系统UI大变样
- CodeForces 468 CHack it!
- layui table 时间戳
- 解决JAVA_HOME nor the JRE_HOME environment variable is defined
- 2017年3月20日下午学习日志
- AngularJS-liveRoomDirective.js 直播间指令
- [0002] Hadoop HDFS cmd常用命令练手