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