1. flatten
NumPy
的 flatten
函数也有改变 shape
的能力,它将高维数组变为向量。但是,它会发生数组复制行为。
In [57]: m = np.random.randint(1,10,(2,3))
In [58]: m
Out[58]:
array([[2, 1, 6],
[4, 2, 4]])
In [59]: n = m.flatten()
In [60]: n
Out[60]: array([2, 1, 6, 4, 2, 4])
In [61]:
n[0] 元素被改变后,m 的元素没有发生变化。
In [61]: n[0] = 100
In [62]: n
Out[62]: array([100, 1, 6, 4, 2, 4])
In [63]: m
Out[63]:
array([[2, 1, 6],
[4, 2, 4]])
In [64]:
2. newaxis
使用 newaxis
增加一个维度,维度的索引只有 0
。
In [64]: m = np.arange(10)
In [65]: m
Out[65]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [69]: n = m[:, np.newaxis]
In [70]: n
Out[70]:
array([[0],
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]])
In [71]:
3. repeat
repeat
操作,实现某一维上的元素复制操作。在维度 0 上复制元素 2 次:
In [72]: a = np.array([[1,2], [3,4]])
In [73]: a
Out[73]:
array([[1, 2],
[3, 4]])
In [74]: np.repeat(a,2,axis=0)
Out[74]:
array([[1, 2],
[1, 2],
[3, 4],
[3, 4]])
In [75]:
在维度 1 上复制元素 2 次:
In [75]: np.repeat(a,2,axis=1)
Out[75]:
array([[1, 1, 2, 2],
[3, 3, 4, 4]])
In [76]:
4. tile
tile
实现按块复制元素:
In [76]: a
Out[76]:
array([[1, 2],
[3, 4]])
In [77]: np.tile(a, 3)
Out[77]:
array([[1, 2, 1, 2, 1, 2],
[3, 4, 3, 4, 3, 4]])
In [78]: np.tile(a, (2, 3))
Out[78]:
array([[1, 2, 1, 2, 1, 2],
[3, 4, 3, 4, 3, 4],
[1, 2, 1, 2, 1, 2],
[3, 4, 3, 4, 3, 4]])
In [79]: a
Out[79]:
array([[1, 2],
[3, 4]])
In [80]:
5. vstack
vertical stack
,沿竖直方向合并多个数组:
In [80]: a = np.array([[1,2], [3,4]])
In [81]: a
Out[81]:
array([[1, 2],
[3, 4]])
In [82]: b = np.array([[-1, -2]])
In [83]: b
Out[83]: array([[-1, -2]])
In [84]: c = np.vstack((a,b)) # 参数为元组
In [85]: c
Out[85]:
array([[ 1, 2],
[ 3, 4],
[-1, -2]])
In [86]:
6. hstack
hstack
沿水平方向合并多个数组。值得注意,不管是 vstack
,还是 hstack
,沿着合并方向的维度,其元素的长度要一致。
In [86]: a = np.array([[1,2],[3,4]])
In [87]: a
Out[87]:
array([[1, 2],
[3, 4]])
In [88]: b = np.array([[5,6,7],[8,9,10]])
In [89]: b
Out[89]:
array([[ 5, 6, 7],
[ 8, 9, 10]])
In [90]: c = np.hstack((a,b))
In [91]: c
Out[91]:
array([[ 1, 2, 5, 6, 7],
[ 3, 4, 8, 9, 10]])
In [92]:
7. concatenate
concatenate
指定在哪个维度上合并数组。
In [92]: a = np.array([[1,2],[3,4]])
In [93]: a
Out[93]:
array([[1, 2],
[3, 4]])
In [94]: b = np.array([[-1,-2]])
In [95]: b
Out[95]: array([[-1, -2]])
In [97]: np.concatenate((a,b),axis=0) # 效果等于 vstack
Out[97]:
array([[ 1, 2],
[ 3, 4],
[-1, -2]])
In [98]: c = np.array([[5,6,7],[8,9,10]])
In [99]: np.concatenate((a,c),axis=1) # 效果等于 hstack
Out[99]:
array([[ 1, 2, 5, 6, 7],
[ 3, 4, 8, 9, 10]])
In [100]:
8. argmax、argmin
argmax
返回数组中某个维度的最大值索引,当未指明维度时,返回 buffer
中最大值索引。如下所示:
In [100]: a = np.random.randint(1,10,(2,3))
In [101]: a
Out[101]:
array([[5, 1, 6],
[2, 1, 1]])
In [102]: a.argmax()
Out[102]: 2
In [103]: a.argmax(axis=0)
Out[103]: array([0, 0, 0], dtype=int64)
In [104]: a.argmax(axis=1)
Out[104]: array([2, 0], dtype=int64)
In [105]: