按行填充numpy数组

3

如何按行填充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.]]])

你的原始数组是否全为零? - wwii
你的数组形状是什么? - wwii
2个回答

4
你的循环是不必要的。
利用广播,你只需进行一次赋值即可完成此操作。
arr[:] = [1,2]

Numpy将右侧数组广播到可分配给左侧的形状。
关于第二个问题(在您的更新中),您可以这样做:
arr.T[..., 1] = [1,2]

1
在这种情况下,对整个数组进行简单赋值即可:
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]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接