阵列¶
“NumPy”杂志 array
是让NumPy变得如此方便和高效的底层机制。
创建阵列¶
一个NumPy array
很容易通过以下方式进行初始化
>>> np.array([0, 1, 2]) # 1D array of integers
array([0, 1, 2])
>>> np.array([0.0, 1.0, 2.0]) # 1D array of floats
array([ 0., 1., 2.])
>>> np.array([[0, 1], [2, 3]]) # 2D array of integers
array([[0, 1],
[2, 3]])
因此,通过嵌套数字列表,您可以构造多维数组。但也有其他方法可以初始化 arrays
:
-
>>> np.zeros(3) array([ 0., 0., 0.]) >>> np.zeros([2, 3]) array([[ 0., 0., 0.], [ 0., 0., 0.]])
-
>>> np.ones(3) array([ 1., 1., 1.]) >>> 3 * np.ones(3) array([ 3., 3., 3.]) >>> np.ones([2, 3]) array([[ 1., 1., 1.], [ 1., 1., 1.]])
-
>>> np.eye(2) array([[ 1., 0.], [ 0., 1.]]) >>> -2 * np.eye(2) array([[-2., -0.], [-0., -2.]])
numpy.arange()
:这个人应该觉得很熟悉range
普通 Python 的。但是在后者只能处理整数的情况下,NumPy的实现也可以处理浮点数。>>> np.arange(5) array([0, 1, 2, 3, 4]) >>> np.arange(3, 7) array([3, 4, 5, 6]) >>> np.arange(2, 4, 0.5) array([ 2. , 2.5, 3. , 3.5])
numpy.linspace()
:如果需要均匀分布的样本,这种初始化方式比numpy.arange()
这是由于后者引入了由实现引起的轻微舍入误差。>>> np.linspace(0, 4, 5) array([ 0., 1., 2., 3., 4.]) >>> np.linspace(0.3, 0.7, 5) array([ 0.3, 0.4, 0.5, 0.6, 0.7]) >>> np.linspace(0.3, 0.7, 4, endpoint=False) array([ 0.3, 0.4, 0.5, 0.6])
数组属性¶
这个 arrays
还提供了一些关于其自身的信息,这些信息可以通过其属性进行访问。
维数¶
这个 ndim
属性是数组的维数。
>>> x = np.array([0.0, 1.0, 2.0])
>>> x.ndim
1
>>> x = np.array([[0, 1, 2], [3, 4, 5]])
>>> x.ndim
2
访问数据¶
类似于 lists
和 tuples
通过引用索引访问数据:
>>> x = np.array([[0, 1, 2],
... [3, 4, 5]])
>>> x[0, 0]
0
>>> x[0, 1]
1
>>> x[1, 0]
3
>>> x[1, 2]
5
切片¶
切片是指从数组中提取部分数据。这是非常高效的,因为不会在内存中复制任何内容。
>>> x = np.array([[0, 1, 2, 3, 4],
... [5, 6, 7, 8, 9],
... [10, 11, 12, 13, 14],
... [15, 16, 17, 18, 19],
... [20, 21, 22, 23, 24]])
>>> x[0, :]
array([0, 1, 2, 3, 4])
>>> x[1, :]
array([5, 6, 7, 8, 9])
>>> x[:, 1]
array([ 1, 6, 11, 16, 21])
>>> x[:3, :3]
array([[ 0, 1, 2],
[ 5, 6, 7],
[10, 11, 12]])
>>> x[2:, 2:]
array([[12, 13, 14],
[17, 18, 19],
[22, 23, 24]])
注解
数组的片共享原始数组的内存。因此,您对切片所做的所有更改也表示在原始数组中:
>>> x = np.array([[0, 1, 2, 3, 4],
... [5, 6, 7, 8, 9],
... [10, 11, 12, 13, 14],
... [15, 16, 17, 18, 19],
... [20, 21, 22, 23, 24]])
>>> print(x)
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]]
>>> x_slice = x[1:-1, 1:-1]
>>> print(x_slice)
[[ 6 7 8]
[11 12 13]
[16 17 18]]
>>> x_slice[1, 1] = 888
>>> print(x_slice)
[[ 6 7 8]
[ 11 888 13]
[ 16 17 18]]
>>> print(x)
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[ 10 11 888 13 14]
[ 15 16 17 18 19]
[ 20 21 22 23 24]]