三维数组设置索引_看图学NumPy:掌握n维数组基础知识
点,看这⼀篇就够了
摘要:NumPy是Python的最重要的扩展程序库之⼀,也是⼊门机器学习编程的必备⼯具。国外有位程序员讲NumPy的基本运算以 摘要:
图解的⽅式写下来,让学习过程变得轻松有趣。
NumPy是Python的最重要的扩展程序库之⼀,也是⼊门机器学习编程的必备⼯具。然⽽对初学者来说,NumPy的⼤量运算⽅法⾮常难记。
最近,国外有位程序员讲NumPy的基本运算以图解的⽅式写下来,让学习过程变得轻松有趣。在Reddit机器学习社区发布不到半天就收获了500+赞。
下⾯就让我们跟随他的教程⼀起来学习吧!
教程内容分为向量 (⼀维数组)、矩阵 (⼆维数组)、三维与更⾼维数组3个部分。
Numpy数组与Python列表
c++是面向对象吗
源代码后面结尾什么意思在介绍正式内容之前,先让我们先来了解⼀下Numpy数组与Python列表的区别。
乍⼀看,NumPy数组类似于Python列表。它们都可以⽤作容器,具有获取(getting)和设置(setting)元素以及插⼊和移除元素的功能。
两者有很多相似之处,以下是⼆者在运算时的⼀个⽰例:web表单textarea
aspnet三层架构是什么和Python列表相⽐,Numpy数组具有以下特点:
更紧凑,尤其是在⼀维以上的维度;向量化操作时⽐Python列表快,但在末尾添加元素⽐Python列表
慢。
△在末尾添加元素时,Python列表复杂度为O(1),NumPy复杂度为O(N)
向量运算
向量初始化
创建NumPy数组的⼀种⽅法是从Python列表直接转换,数组元素的类型与列表元素类型相同。
NumPy数组⽆法像Python列表那样加长,因为在数组末尾没有保留空间。
因此,常见的做法是定义⼀个Python列表,对它进⾏操作,然后再转换为NumPy数组,或者⽤np.zeros
配必要的空间:
有时我们需要创建⼀个空数组,⼤⼩和元素类型与现有数组相同:
_like对应项,来创建相同类型的常数数组:
实际上,所有⽤常量填充创建的数组的函数都有⼀个_like
arange或者linspace
linspace来初始化单调序列数组:
在NumPy中,可以⽤arange
如果需要类似[0., 1., 2.]的浮点数组,可以更改arange输出的类型:arange(3).astype(float)。
但是有更好的⽅法:arange函数对数据类型敏感,如果将整数作为参数,⽣成整数数组;如果输⼊浮点数(例如arange(3.)),则⽣成浮点数组。
但是arange在处理浮点数⽅⾯并不是特别擅长:
这是因为0.1对于我们来说是⼀个有限的⼗进制数,但对计算机⽽⾔却不是。在⼆进制下,0.1是⼀个⽆穷⼩数,必须在某处截断。
这就是为什么将⼩数部分加到步骤arange通常是⼀个不太好的⽅法:我们可能会遇到⼀个bug,导致数组的元素个数不是我们想要的数,这会降低代码的可读性和可维护性。
轮播频道是什么软件linspace会派上⽤场。它不受舍⼊错误的影响,并始终⽣成要求的元素数。
这时候,linspace
出于测试⽬的,通常需要⽣成随机数组,NumPy提供随机整数、均匀分布、正态分布等⼏种随机数形式:
向量索引
⼀旦将数据存储在数组中,NumPy便会提供简单的⽅法将其取出:
上⾯展⽰了各式各样的索引,例如取出某个特定区间,从右往左索引、只取出奇数位等等。
但它们都是所谓的view,也就是不存储原始数据。并且如果原始数组在被索引后进⾏更改,则不会反映原始数组的改变。
这些索引⽅法允许分配修改原始数组的内容,因此需要特别注意:只有下⾯最后⼀种⽅法才是复制数组,如果⽤其他⽅法都可能破坏原始数据:
从NumPy数组中获取数据的另⼀种超级有⽤的⽅法是布尔索引,它允许使⽤各种逻辑运算符,来检索符合条件的元素:
注意:Python中的三元⽐较3<=a<=5在NumPy数组中不起作⽤。
np.clip:
如上所述,布尔索引也会改写数组。它有两个常见的函数,分别是np.where
np.where和np.clip
向量运算
算术运算是NumPy速度最引⼊注⽬的地⽅之⼀。NumPy的向量运算符已达到C++级别,避免了Python的慢循环。NumPy允许像普通数字⼀样操作整个数组(加减乘除、整除、幂):
python基础知识整理△和Python中⼀样,a//b表⽰div b(整除),x**n表⽰xⁿ
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论