简体   繁体   English

按行填充numpy数组

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM