假设我们有两个形状阵列(480,640,3)和(480,640),比如RGB和灰度图像。你如何将第一个元素分成第二个?到目前为止,我使用以下代码,但它有更好的代码片段吗?
arr1[:, :, 0] /= arr2
arr1[:, :, 1] /= arr2
arr1[:, :, 2] /= arr2
答案 0 :(得分:4)
您可以将另一个轴添加到arr2
,以便它broadcast。
>>> a = np.ones((2,2,3))
>>> b = np.ones((2,2)) * 2
>>> a
array([[[ 1., 1., 1.],
[ 1., 1., 1.]],
[[ 1., 1., 1.],
[ 1., 1., 1.]]])
>>> b
array([[ 2., 2.],
[ 2., 2.]])
>>> a = a / b[:, :, np.newaxis]
>>> a
array([[[ 0.5, 0.5, 0.5],
[ 0.5, 0.5, 0.5]],
[[ 0.5, 0.5, 0.5],
[ 0.5, 0.5, 0.5]]])
>>>
答案 1 :(得分:1)
嗯......你可能会复制你的灰度数组,只做一个分区吗?
arr1 /= arr2.repeat(3).reshape(np.shape(arr1))
答案 2 :(得分:1)
这是一个可能有效的摘录:
result = np.dstack([x/np.reshape(arr2,(480,640,1)) for x in np.dsplit(arr1,3)])
将RGB阵列分成3个2D阵列,将每个阵列除以灰度阵列并重新组合。
答案 3 :(得分:1)