Python 填充Numpy数组三维的干净方法

Python 填充Numpy数组三维的干净方法,python,numpy,Python,Numpy,我有一个代表RGB图像的3D numpy数组。我想用一个特定的RGB值填充整个图像numpy.fill仅将标量作为参数——有没有比循环更干净的方法将相同的三维RGB三元组分配给二维网格中的每个点?可能: >>> m = np.zeros((2,2,3)) >>> m[:] = [10,20,3] >>> m array([[[ 10., 20., 3.], [ 10., 20., 3.]], [[

我有一个代表RGB图像的3D numpy数组。我想用一个特定的RGB值填充整个图像
numpy.fill
仅将标量作为参数——有没有比循环更干净的方法将相同的三维RGB三元组分配给二维网格中的每个点?

可能:

>>> m = np.zeros((2,2,3))
>>> m[:] = [10,20,3]
>>> m
array([[[ 10.,  20.,   3.],
        [ 10.,  20.,   3.]],

       [[ 10.,  20.,   3.],
        [ 10.,  20.,   3.]]])
>>> m[0,0]
array([ 10.,  20.,   3.])
>>> m[0,1]
array([ 10.,  20.,   3.])
>>> m[1,0]
array([ 10.,  20.,   3.])
>>> m[1,1]
array([ 10.,  20.,   3.])
初始化数组

In [2]: m = numpy.zeros((2,2,3))

In [3]: m
Out[3]: 
array([[[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]],

       [[ 0.,  0.,  0.],
        [ 0.,  0.,  0.]]])
用(r,g,b)三元组填写每个(x,y)元素

这就是你想做的吗

另外,如果您想设置,比如说,仅设置绿色组件

In [25]: m[..., 0] = 77

In [26]: m
Out[26]: 
array([[[ 77.,  22.,  33.],
        [ 77.,  22.,  33.]],

       [[ 77.,  22.,  33.],
        [ 77.,  22.,  33.]]])

我想基本上做到这一点,但不是
[11,22,33]
我希望以特定的方式生成随机数(这里是一个顶部带有随机噪声的函数)。如果我做
m[…]=np.random(3)
,我总是有相同的三个随机数。如果我做的是
m=np.random((2,2,3))
,我几乎无法控制随机数是如何生成的。当然,我不想要循环。你有什么想法吗?你也可以分配一个数组,例如
m[…,0]=[1,2,3,4]
它必须是正确的大小,数据由你决定。
In [25]: m[..., 0] = 77

In [26]: m
Out[26]: 
array([[[ 77.,  22.,  33.],
        [ 77.,  22.,  33.]],

       [[ 77.,  22.,  33.],
        [ 77.,  22.,  33.]]])