簡體   English   中英

這兩個numpy陣列形狀有什么區別?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM