簡體   English   中英

在Numpy中將1-D陣列添加到3-D陣列

[英]Adding a 1-D Array to a 3-D array in Numpy

我試圖添加兩個數組。

np.zeros((6,9,20)) + np.array([1,2,3,4,5,6,7,8,9])

我想得到一些類似的東西

array([[[ 1.,  1.,  1., ...,  1.,  1.,  1.],
        [ 2.,  2.,  2., ...,  2.,  2.,  2.],
        [ 3.,  3.,  3., ...,  3.,  3.,  3.],
        ..., 
        [ 7.,  7.,  7., ...,  7.,  7.,  7.],
        [ 8.,  8.,  8., ...,  8.,  8.,  8.],
        [ 9.,  9.,  9., ...,  9.,  9.,  9.]],

       [[ 1.,  1.,  1., ...,  1.,  1.,  1.],
        [ 2.,  2.,  2., ...,  2.,  2.,  2.],
        [ 3.,  3.,  3., ...,  3.,  3.,  3.],
        ..., 
        [ 7.,  7.,  7., ...,  7.,  7.,  7.],
        [ 8.,  8.,  8., ...,  8.,  8.,  8.],
        [ 9.,  9.,  9., ...,  9.,  9.,  9.]],

因此,在相應列的每個矩陣中添加條目。 我知道我可以在某種循環中對其進行編碼,但我正在嘗試使用更優雅/更快的解決方案。

在使用Nonenp.newaxis擴展第二個數組的維度后,您可以將broadcasting發揮到np.newaxis ,就像這樣 -

np.zeros((6,9,20))+np.array([1,2,3,4,5,6,7,8,9])[None,:,None]

如果我理解正確,最好使用的是NumPy的廣播 您可以通過以下方式獲得所需內容:

np.zeros((6,9,20))+np.array([1,2,3,4,5,6,7,8,9]).reshape((1,9,1))

我更喜歡使用reshape方法對Divakar顯示的索引使用切片表示法,因為我已經做了很多工作來將形狀作為變量進行操作,並且在變量中傳遞元組比在切片中傳遞更容易一些。 你也可以做這樣的事情:

array1.reshape(array2.shape)

順便說一句,如果你真的在尋找像沿着軸從0到N-1的數組一樣簡單的東西,那么請查看mgrid 你只需要獲得上面的輸出

np.mgrid[0:6,1:10,0:20][1]

你可以使用tile(但你也需要swapaxes來獲得正確的形狀)。

A = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
B = np.tile(A, (6, 20, 1))
C = np.swapaxes(B, 1, 2)

暫無
暫無

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

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