如何按行填充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.]]])
我希望arr [1]数组填充[1,2],如下所示:
arr=array([[[ 0., 0., 0.],
[ 0., 0., 0.]],
[[ 1., 1., 1.],
[ 2., 2., 2.]],
[[ 0., 0., 0.],
[ 0., 0., 0.]]])
答案 0 :(得分:2)
你的循环是没有必要的。
利用broadcasting,您可以通过一项任务来完成此任务:
arr[:] = [1,2]
Numpy将右侧阵列广播到可分配给左侧的形状。
关于第二个问题(在您的更新中),您可以:
arr.T[..., 1] = [1,2]
答案 1 :(得分: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]])