簡體   English   中英

按行填充numpy數組

[英]Fill numpy array by rows

如何按行填充numpy數組?

例如arr=np.zeros([3,2]). 我想用list = [1,2].替換每一行list = [1,2].

所以輸出是:

[1 2 
 1 2
 1 2]

我可以用手做

for x in arr[:]:
    arr[:]=[1,2]

但是我相信還有更多更快的方法。

抱歉,請看一下編輯:假設我們有:

arr=array([[[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]]])

我想要由[1,2]填充arr [1]數組,如下所示:

arr=array([[[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 1.,  1.,  1.],
        [ 2.,  2.,  2.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]]])

您的循環不是必需的。

利用廣播 ,您可以通過一次分配就可以做到這一點:

arr[:] = [1,2]

Numpy將右側數組廣播為可分配給左側的形狀。


至於第二個問題(在您的更新中),您可以執行以下操作:

arr.T[..., 1] = [1,2]

在這種情況下,可以對整個數組進行簡單分配:

In [952]: arr=np.zeros((3,2),int)
In [953]: arr[...]=[1,2]
In [954]: arr
Out[954]: 
array([[1, 2],
       [1, 2],
       [1, 2]])

這是因為列表轉換為(2,)數組,可以將其廣播到(1,2)然后是(3,2),以匹配arr

In [955]: arr[...]=np.array([3,2])[None,:]
In [956]: arr
Out[956]: 
array([[3, 2],
       [3, 2],
       [3, 2]])

如果要按列設置值,則需要做更多的工作

In [957]: arr[...]=np.array([1,2,3])[:,None]
In [958]: arr
Out[958]: 
array([[1, 1],
       [2, 2],
       [3, 3]])

我必須明確地制作一個(3,1)數組,該數組廣播到(3,2)。

=================

我已經回答了您修改過的問題:

In [963]: arr[1,...]=np.array([1,2])[:,None]
In [964]: arr
Out[964]: 
array([[[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 1.,  1.,  1.],
        [ 2.,  2.,  2.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]]])

=================

tile添加到您的工具箱中:

In [967]: np.tile([1,2],(3,1))
Out[967]: 
array([[1, 2],
       [1, 2],
       [1, 2]])
In [968]: np.tile([[1],[2]],(1,3))
Out[968]: 
array([[1, 1, 1],
       [2, 2, 2]])

暫無
暫無

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

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