导入NumPy库
一般来说,习惯将numpy库简化为np
import numpy as np
生成NumPy数组
利用序列生成
如果构造NumPy数组的数据源类型不统一(这里的“不统一”主要是指精度上存在差异,更高层次上是统一的,比如说都是数值型的),且这些数据类型可以相互转换,那么NumPy会遵循“就高不就低”(upcast)的规则进行类型转换,比如说列表中的数据有整数,也有浮点数,NumPy会把所有数据都转换为浮点数,这是因为浮点数的精度更高。通过类型转换,NumPy数组的数据源类型能保持统一。
可以用astype函数显式指定转换数组的类型,如下代码会将np数组转换成32位整型数组。
import numpy as np
arr1=[1,2,3,4,5]
arr1=np.array(arr1)
arr1=arr1.astype(np.int32)
arr1
如果数据序列是嵌套的,且嵌套序列是等长的,则通过array()方法可以把嵌套的序列转为与嵌套级别适配的高维数组。
利用函数形成数组
除了利用数据序列生成NumPy数组,我们还可以使用特定的方法,如np.arange()来生成。
arrange(start,stop,step,dtype)
arr=np.arange(1,10,1,'int32')
#OUT array([1, 2, 3, 4, 5, 6, 7, 8, 9])
arrange()根据start与stop指定的范围及step设定的步长,生成一个ndarray对象。start为起始值,默认为0。stop为终止值。取值区间是左闭右开的,即stop这个终止值是不包括在内的。step为步长,如果不指定,默认值为1。dtype指明返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。arrange()方法的使用与Python的内置函数range()十分类似。两者都能均匀地等分区间,但range()仅可用于循环迭代。
np.arange返回的数组,不仅可以直接输出,还可以当作向量,参与到实际运算当中。
其他生成方式
可以利用np.zeros()、np.ones()等函数,生成指定维度和填充固定数值的数组。其中,np.zeros()函数生成的数组由0来填充,np.ones()生成的数组由1来填充,它们通常用来对某些变量进行初始化。
zero=np.zeros(shape=(3,4))
#array([[0., 0., 0., 0.],
# [0., 0., 0., 0.],
# [0., 0., 0., 0.]])
one=np.ones(shape=(3,4))
#array([[1., 1., 1., 1.],
# [1., 1., 1., 1.],
# [1., 1., 1., 1.]])
还有一种初始化的方式是np的zeros_like()函数,它可以将给定的数组所有值置为0,同样的还有ones_like()
(将给定数组置为1)
empty_like():
(产生和给定数组尺寸和类型相同的数组,但该数组中的元素没有被初始化)
full_like():
(产生和给定数组尺寸和类型相同的数组,该数组中的元素都被初始化为某个给定值)
np库中的重要功能 ——N维数组
一个N维数组就是一个通用的同类数据容器,也就是说它包含的每个元素数据类型均相同。每个数组的维度都由一个ndim属性来描述。
import numpy as np
arr=np.arange(1,10)
arr.ndim
# 1
对于N维数组而言,它还有一个重要的属性—shape(数组的形状)。形状主要用来表征数组每个维度的数量。一维数组的形状就是它的长度。
import numpy as np
arr=np.arange(1,10)
arr.shape
#(9,)
NumPy数组形状并不是一成不变的,可以通过reshape()方法将原有数组进行重构。
import numpy as np
arr=np.arange(1,10)
arr=arr.reshape(3,3)
arr
#array([[1, 2, 3],
# [4, 5, 6],
# [7, 8, 9]])
arr.shape #(3,3)
arr.ndim #2
这里需要注意的是,NumPy表示三维数组维度信息的方式和我们通常的认知稍有不同。比如,我们想创建两个3行5列的数组,它的形状参数为(2, 3, 5),而不是(3,5, 2)