[英]Fill numpy array by rows
How can I fill the numpy array by rows? 如何按行填充numpy数组?
For example arr=np.zeros([3,2]).
例如
arr=np.zeros([3,2]).
I want replace every row by list = [1,2].
我想用
list = [1,2].
替换每一行list = [1,2].
So output is: 所以输出是:
[1 2
1 2
1 2]
I can make it by hand 我可以用手做
for x in arr[:]:
arr[:]=[1,2]
But I believe there is more faster ways. 但是我相信还有更多更快的方法。
Sorry, please look edit: Suppose, we have: 抱歉,请看一下编辑:假设我们有:
arr=array([[[ 0., 0., 0.],
[ 0., 0., 0.]],
[[ 0., 0., 0.],
[ 0., 0., 0.]],
[[ 0., 0., 0.],
[ 0., 0., 0.]]])
I want arr[1] array fill by [1,2] like this: 我想要由[1,2]填充arr [1]数组,如下所示:
arr=array([[[ 0., 0., 0.],
[ 0., 0., 0.]],
[[ 1., 1., 1.],
[ 2., 2., 2.]],
[[ 0., 0., 0.],
[ 0., 0., 0.]]])
Your loop isn't necessary. 您的循环不是必需的。
Making use of broadcasting , you can do this with a single assignment: 利用广播 ,您可以通过一次分配就可以做到这一点:
arr[:] = [1,2]
Numpy broadcasts the right-hand-side array to a shape assignable to the left-hand-side. Numpy将右侧数组广播为可分配给左侧的形状。
As for the second question (in your update), you can do: 至于第二个问题(在您的更新中),您可以执行以下操作:
arr.T[..., 1] = [1,2]
In this case, simple assignment to the whole array works: 在这种情况下,可以对整个数组进行简单分配:
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]])
That's because the list translates into a (2,) array, which can be broadcasted to (1,2) and then (3,2), to match arr
: 这是因为列表转换为(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]])
If I want to set values by column, I have to do a bit more work 如果要按列设置值,则需要做更多的工作
In [957]: arr[...]=np.array([1,2,3])[:,None]
In [958]: arr
Out[958]:
array([[1, 1],
[2, 2],
[3, 3]])
I have to explicitly make a (3,1) array, which broadcasts to (3,2). 我必须明确地制作一个(3,1)数组,该数组广播到(3,2)。
================= =================
I already answered your modified question: 我已经回答了您修改过的问题:
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.]]])
================= =================
Add tile
to your toolkit: 将
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.