1. 基础
Numpy的主要对象是齐次多维数组, 在Numpy中dimensions(维度)称为axes(轴), axis的复数
-
array.ndim
数组的轴数(维度,秩)。 -
array.shape
数组的尺寸。这是一个整数元组,指示每个维度中数组的大小。对于具有n行和m列的矩阵,shape将为(n,m)。因此这个整数元组的长度 为轴数ndim。 -
array.size
数组元素的总数,等于shape里元素的的乘积。 -
array.dtype
一个描述数组中元素的类型的对象。可以使用标准Python类型创建或指定dtype。另外,NumPy提供了自己的类型。比如,numpy.int32,numpy.int16和numpy.float64。
#3D空间中的点的坐标[1, 2, 1]只有一个轴。该轴上有3个元素,所以我们说它的长度为3
>>> np.array([1, 0, 0]).ndim
1
>>> np.array([1, 0, 0]).ndim == len(np.array([1, 0, 0]).shape)
True
#下面这个数组有2个轴。第一轴的长度为2,第二轴的长度为3
>>> np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]).ndim
2
#根据序列中元素的类型推导所得数组的类型
np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]).dtype
dtype('int64')
#根据序列中元素的类型推导所得数组的类型
>>> np.array([1.2, 3.5, 5.1]).dtype
dtype('float64')
#数组的类型也可以在创建时明确指定:
>>> np.array([[1,2], [3,4]], dtype=complex)
array([[1.+0.j, 2.+0.j],
[3.+0.j, 4.+0.j]])
>>> type(np.array([1.2, 3.5, 5.1]))
<class 'numpy.ndarray'> #ndarray
2. array 的创建
- 给array传入python自带的list或tupple进去,会自动生成对应维度的array数据结构。传入object可以是全列表结构也可以是列表加元组,好像比较随意,但给array传入的obeject必须是一个整体。
>>> a = [1, 2, 3, 4]
>>> b = (1, 2, 3, 4)
>>> np.array(a)
array([1, 2, 3, 4])
>>> np.array(b)
array([1, 2, 3, 4])
>>> np.array([1, 2, 3, 4], [5, 6, 7, 8])
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
>>> np.array([(1, 2), (3, 4)])
array([[1, 2],
[3, 4]])
>>> np.array([(1, 2), [3, 4]])
array([[1, 2],
[3, 4]])
>>> np.array(((1, 2), [3, 4]))
array([[1, 2],
[3, 4]])
>>> np.array(1, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: data type not understood
- 为了创建数字序列,NumPy提供了类似于range返回数组而不是列表的函数 。
>>> np.arange(10, 30, 5)
array([10, 15, 20, 25])
>>> np.arange(20)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19])
#reshape后面两个数字乘积必须等于20
>>> np.arange(20).reshape(4, 5)
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
- 通常,数组的元素最初是未知的,但是其大小是已知的。因此,NumPy提供了几个函数来创建具有初始占位符内容的数组
#zeros创建一个全0结构,ones和zeros使用方法一样
>>> np.zeros((2, 3))
array([[0., 0., 0.],
[0., 0., 0.]])
#有3个2行3列的数据
>>> np.zeros((3, 2, 3))
array([[[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.]]])
#empty并不是空的意思,而是说,在传数据进来之前,去创建一个数据结构先占住位置
#其初始内容是随机的,并取决于内存的状态,默认情况下,创建的数组的dtype为 float64
>>> np.empty((2, 2))
array([[4.9e-324, 9.9e-324],
[1.5e-323, 2.0e-323]])
#在0到2之间生成9个数字,包含2,arang不包含
>>> np.linspace(0, 2, 9)
array([0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])
3. 打印array
-
最后一个轴从左到右打印
-
倒数第二个从上到下打印
-
其余的也从上到下打印,每个切片之间用空行隔开。
-
然后将一维数组打印为行,将二维打印为矩阵,将三维打印为矩阵列表。
>>> print(np.arange(6))
[0 1 2 3 4 5]
>>> print(np.arange(12).reshape(3,4))
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
>>> print(np.arange(24).reshape(2,3,4))
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18