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