Numpy图解(一)–向量

目录

Numpy数组与Python列表

Numpy向量

向量初始化

向量索引

向量运算

Numpy数组与Python列表

它们都可以用作容器,具有获取(getting)和设置(setting)元素以及插入和移除元素的功能。

两者有很多 相似之处,以下是二者在运算时的一个示例:

Numpy图解(一)--向量

和Python列表相比, Numpy数组具有以下特点

更紧凑,尤其是在一维以上的维度;向量化操作时比Python列表快,但在末尾添加元素比Python列表慢。

Numpy图解(一)--向量

在末尾添加元素时,Python列表复杂度为O(1),NumPy复杂度为O(N)

Numpy向量

向量初始化

创建NumPy数组的一种方法是从Python列表直接转换,数组元素的类型与列表元素类型相同。

Numpy图解(一)--向量

NumPy数组无法像Python列表那样加长,因为在数组末尾没有保留空间。

因此,常见的做法是定义一个Python列表,对它进行操作,然后再转换为NumPy数组,或者用 np.zerosnp.empty初始化数组,预分配必要的空间:

Numpy图解(一)--向量

有时我们需要创建一个空数组,大小和元素类型与现有数组相同:

Numpy图解(一)--向量

实际上,所有用常量填充创建的数组的函数都有一个 _like对应项,来创建相同类型的常数数组:

Numpy图解(一)--向量

在NumPy中,可以用 arange或者 linspace来初始化单调序列数组:

Numpy图解(一)--向量

如果需要类似[0., 1., 2.]的浮点数组,可以更改arange输出的类型:arange(3).astype(float)。

但是有更好的方法:arange函数对数据类型敏感,如果将整数作为参数,生成整数数组;如果输入浮点数(例如arange(3.)),则生成浮点数组。

但是arange在处理浮点数方面并不是特别擅长:

Numpy图解(一)--向量

这是因为0.1对于我们来说是一个有限的十进制数,但对计算机而言却不是。在二进制下,0.1是一个无穷小数,必须在某处截断。

这就是为什么将小数部分加到步骤arange通常是一个不太好的方法:我们可能会遇到一个bug,导致数组的元素个数不是我们想要的数,这会降低代码的可读性和可维护性。

这时候, linspace会派上用场。它不受舍入错误的影响,并始终生成要求的元素数。

出于测试目的,通常需要生成随机数组,NumPy提供随机整数、均匀分布、正态分布等几种随机数形式:

Numpy图解(一)--向量

向量索引

一旦将数据存储在数组中,NumPy便会提供简单的方法将其取出:

Numpy图解(一)--向量

上面展示了各式各样的索引,例如取出某个特定区间,从右往左索引、只取出奇数位等等。

但它们都是所谓的view,也就是不存储原始数据。并且如果原始数组在被索引后进行更改,则不会反映原始数组的改变。

这些索引方法允许分配修改原始数组的内容,因此需要特别注意:只有下面最后一种方法才是复制数组,如果用其他方法都可能破坏原始数据:

Numpy图解(一)--向量

从NumPy数组中获取数据的另一种超级有用的方法是布尔索引,它允许使用各种逻辑运算符,来检索符合条件的元素:

Numpy图解(一)--向量

注意:Python中的三元比较3

Original: https://blog.csdn.net/weixin_43145427/article/details/124298134
Author: hanscal
Title: Numpy图解(一)–向量

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/693861/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球