>>> np.zeros(1)
array([0.])
>>> np.zeros(5)
array([0., 0., 0., 0., 0.])
-------------------------------
>>> np.zeros((1,5))
array([[0., 0., 0., 0., 0.]])
>>> np.zeros((2,5))
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
-------------------------------
>>> a = np.zeros((2,5))
>>> a[:, 0:2] = 3
array([[3., 3., 0., 0., 0.],
[3., 3., 0., 0., 0.]])
>>> a[0:1, 0:2] = 5
array([[5., 5., 0., 0., 0.],
[3., 3., 0., 0., 0.]])
-------------------------------
>>> a.ravel()
array([5., 5., 0., 0., 0., 3., 3., 0., 0., 0.])
>>> a.reshape(2, 5)
array([[5., 5., 0., 0., 0.],
[3., 3., 0., 0., 0.]])
-------------------------------
>>> np.arange(5)
array([0, 1, 2, 3, 4])
>>> np.arange(6).reshape((2, 3))
array([[0, 1, 2],
[3, 4, 5]])
-------------------------------
Multidimensional arrays can have one index per axis. These indices are given in a tuple separated by commas:
之前一直很少用 Python,趁此機會把 numpy 搞懂,numpy 的邏輯還是從 Python 的切片運算子來的,只是 numpy 的目的是為了科學或者說數學運算,故常用它來表示矩陣運算。在一些論文中,常常可能會有讓 A 矩陣的某行向量等於 B 矩陣的某行向量,如果是直接使用一個一個元素來指派數值,看來就不專業也很煩瑣。
結論就是上句英文就是操作多維陣列的技巧,故在操作時要先掌握住一個原則,這個陣列或是說矩陣是多少的維度,我想改變的又是那個維度上的資料,是整個向量還是向量裡的某一個元素,這時就可以清楚知道 [xx, xx, ...] 裡面要如何下了,正常來說 3 維就應該有 3 個索引,但要改的是某個特定維度的整個元素,這時後免的索引就可以省略。
>>> A = np.zeros((3, 2, 5))
array([[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],
[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]]])
>>> A[:, 0] = 1
array([[[1., 1., 1., 1., 1.],
[0., 0., 0., 0., 0.]],
[[1., 1., 1., 1., 1.],
[0., 0., 0., 0., 0.]],
[[1., 1., 1., 1., 1.],
[0., 0., 0., 0., 0.]]])
>>> A[:, 1, -1] = 999
array([[[ 1., 1., 1., 1., 1.],
[ 0., 0., 0., 0., 999.]],
[[ 1., 1., 1., 1., 1.],
[ 0., 0., 0., 0., 999.]],
[[ 1., 1., 1., 1., 1.],
[ 0., 0., 0., 0., 999.]]])