[英]what's the difference between these two numpy array shape?
In [136]: s = np.array([[1,0,1],[0,1,1],[0,0,1],[1,1,1]])
In [137]: s
Out[137]:
array([[1, 0, 1],
[0, 1, 1],
[0, 0, 1],
[1, 1, 1]])
In [138]: x = s[0:1]
In [139]: x.shape
Out[139]: (1, 3)
In [140]: y = s[0]
In [141]: y.shape
Out[141]: (3,)
In [142]: x
Out[142]: array([[1, 0, 1]])
In [143]: y
Out[143]: array([1, 0, 1])
在上面的代碼中,x的形狀為(1,3),y的形狀為(3,)。
(1,3): 1 row and 3 columns
(3,): How many rows and columns in this case?
(3,)代表一維數組嗎?
在實踐中,如果要逐行遍歷矩陣,應該走哪條路?
for i in range(len(x)):
row = x[i]
# OR
row = x[i:i+1]
首先,你可以得到的維數numpy
陣列array
通過len(array.shape)
某些維度的長度為1的數組不等於那些維度被刪除的數組,例如:
>>> a = np.array([[1], [2], [3]])
>>> b = np.array([1, 2, 3])
>>> a
array([[1],
[2],
[3]])
>>> b
array([1, 2, 3])
>>> a.shape
(3, 1)
>>> b.shape
(3,)
>>> a + a
array([[2],
[4],
[6]])
>>> a + b
array([[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
從概念上講,形狀數組(3, 1)
與形狀數組(3,)
之間的差異類似於[100]
和100
的長度之間的差異。
[100]
是一個碰巧只有一個元素的list
。 它可以有更多,但是現在它具有最小數量的元素 。
另一方面,談論100
的長度甚至沒有意義,因為它沒有一個。
同樣,形狀(3, 1)
的數組有3行和1列,而形狀(3,)
的數組根本沒有列 。 從某種意義上說,它甚至沒有行。 它是一行,就像100
沒有元素一樣,因為它是一個元素。
有關形狀不同的數組在與其他數組交互時的行為的更多信息,請參見廣播規則 。
最后,為了完整起見,要遍歷numpy
數組的行,您可以for row in array
。 如果要遍歷np.moveaxis
,則可以使用np.moveaxis
,例如:
>>> array = np.array([[1, 2], [3, 4], [5, 6]])
>>> for row in array:
... print(row)
...
[1 2]
[3 4]
[5 6]
>>> for col in np.moveaxis(array, [0, 1], [1, 0]):
... print(col)
...
[1 3 5]
[2 4 6]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.