簡體   English   中英

如何將(5,)numpy數組轉換為(5,1)?

[英]How to convert (5,) numpy array to (5,1)?

如何將(5,)numpy數組轉換為(5,1)?

以及如何從(5,1)向后轉換為(5,)?

(5,)數組的目的是什么,為什么省略一個維度? 我的意思是為什么我們不總是使用(5,1)形式?

這是僅在1D和2D陣列中發生還是在3D陣列中發生,如can(2,3,)數組是否存在?

更新:

我設法將(5,)轉換為(5,1)

a= np.reshape(a, (a.shape[0], 1)) 

但建議的變體看起來更簡單:

a = a[:, None] or a = a[:, np.newaxis]

要從(5,1)轉換為(5,),可以使用np.ravel

a= np.ravel(a)

您可以通過執行a = a[:, None]a = a[:, np.newaxis]將新軸添加到數組a

至於“一維省略”,我真的不明白你的問題,因為它沒有結束:數組可能是(5, 1, 1)等。

具有形狀(5,) numpy陣列是1維陣列,而具有形狀(5,1)的numpy陣列是2維陣列。 差異很微妙,但可以以一種主要方式改變一些計算。 人們必須特別小心,因為這些變化可能會使所有維度變平,例如np.meannp.sum

除了@ m-massias的答案之外,請考慮以下示例:

17:00:25 [2]: import numpy as np
17:00:31 [3]: a = np.array([1,2])
17:00:34 [4]: b = np.array([[1,2], [3,4]])
17:00:45 [6]: b * a
      Out[6]: 
array([[1, 4],
       [3, 8]])
17:00:50 [7]: b * a[:,None] # Different result!
      Out[7]: 
array([[1, 2],
       [6, 8]])

a具有形狀(2,)並在第二維上廣播 所以你得到的結果是每一行(第一個維度)乘以向量:

17:02:44 [10]: b * np.array([[1, 2], [1, 2]])
      Out[10]: 
array([[1, 4],
       [3, 8]])

另一方面, a[:,None]具有形狀(2,1) ,因此已知矢量的方向是列。 因此,您得到的結果來自以下操作(其中每列乘以a ):

17:03:39 [11]: b * np.array([[1, 1], [2, 2]])
      Out[11]: 
array([[1, 2],
       [6, 8]])

我希望能夠說明兩個陣列的行為方式有何不同。

使用reshape()函數,例如打開python終端並輸入以下內容:

    >>> import numpy as np
    >>> a = np.random.random(5)
    >>> a
    array([0.85694461, 0.37774476, 0.56348081, 0.02972139, 0.23453958])
    >>> a.shape
    (5,)
    >>> b = a.reshape(5, 1)
    >>> b.shape
    (5, 1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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