2016-11-28 140 views
0

如何按行填充numpy數組?按行填充numpy數組

例如arr=np.zeros([3,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.]]]) 

我想常用3 [1]數組通過[1,2]填補這樣的:

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

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

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

是您原來的數組實際上都是零? – wwii

+0

什麼是你的陣列的shapw? – wwii

回答

1

你的循環ISN沒有必要。

利用的broadcasting,你可以用一個單一的分配做到這一點:

arr[:] = [1,2] 

NumPy的廣播右手側陣列的形狀分配到左手側。


至於第二個問題,(在你的更新),你可以這樣做:

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

請看更新 – user7198142

+0

@ user7198142請看更新的回答 – shx2

0

在這種情況下,簡單的分配到整個陣列的工作原理:

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]]) 
+0

請看更新 – user7198142

+0

我已經展示瞭如何按列填寫。看我的編輯 – hpaulj