Boa*_*Boa 5 python arrays numpy python-2.7
我写了一个生成2个彩色图像块的函数:
def generate_block():
x = np.ones((50, 50, 3))
x[:,:,0:3] = np.random.uniform(0, 1, (3,))
show_image(x)
y = np.ones((50, 50, 3))
y[:, :, 0:3] = np.random.uniform(0, 1, (3,))
show_image(y)
Run Code Online (Sandbox Code Playgroud)
然后,我想将这两种颜色组合起来以形成渐变,即1种图像从一种颜色变为另一种颜色。我不确定如何继续,有什么建议吗?使用np.linspace()我可以形成一维步骤数组,但是那又是什么呢?
这是你想要的 ?
def generate_block():
x = np.ones((50, 50, 3))
x[:, :, 0:3] = np.random.uniform(0, 1, (3,))
plt.imshow(x)
plt.figure()
y = np.ones((50, 50, 3))
y[:,:,0:3] = np.random.uniform(0, 1, (3,))
plt.imshow(y)
plt.figure()
c = np.linspace(0, 1, 50)[:, None, None]
gradient = x + (y - x) * c
plt.imshow(gradient)
return x, y, gradient
Run Code Online (Sandbox Code Playgroud)
np.linspace
按照您的建议使用,我使用了广播,它是numpy中非常强大的工具。在这里阅读更多。
c = np.linspace(0, 1, 50)
创建一个形状数组,(50,)
其中包含50个从0到1的数字,它们之间的间距均匀。加法[:, None, None]
使该数组3D形状为shape (50, 1, 1)
。在中使用时(x - y) * c
(由于x - y
为)(50, 50, 3)
,最后2个维度都会进行广播。c被视为形状的数组,我们将其称为shape的d (50, 50, 3)
,这样对于range(50)中的i,d[i, :, :]
是一个(50, 3)
填充有的形状的数组c[i]
。
所以梯度的第一行是x[0, :, :] + c[0] * (x[0, :, :] - y[0, :, :])
,这仅仅是x[0, :, :]
第二行x[1, :, :] + c[1] * (x[1, :, :] - y[1, :, :])
,等等。i
第线的重心x[i]
和y[i]
具有系数1 - c[i]
和c[i]
您可以使用c的定义中的[None,:,None]进行列式变化。
归档时间: |
|
查看次数: |
1547 次 |
最近记录: |