【发布时间】:2018-06-22 08:05:58
【问题描述】:
我有一个Nx3 numpy 数组:
A = [[01,02,03]
[11,12,13]
[21,22,23]]
我需要一个数组,如果第二个和第三个数字的总和大于 20,则交换第二个和第三列:
[[01,02,03]
[11,13,12]
[21,23,22]]
是否有可能在没有循环的情况下实现这一点?
更新:
所以,这背后的故事是我想在 RGB 图像中交换颜色,即绿色和蓝色,但不是黄色 - 这是我的条件。根据经验,我发现它是abs(green - blue) > 15 && (blue > green)
swapped = np.array(img).reshape(img.shape[0] * img.shape[1], img.shape[2])
idx = ((np.abs(swapped[:,1] - swapped[:,2]) < 15) & (swapped[:, 2] < swapped[:, 1]))
swapped[idx, 1], swapped[idx, 2] = swapped[idx, 2], swapped[idx, 1]
plt.imshow(swapped.reshape(img.shape[0], img.shape[1], img.shape[2]))
这确实有效,但部分有效。第一列将被交换,但第二列将被覆盖。
# tested in pyton3
a = np.array([[1,2,3],[11,12,13],[21,22,23]])
a[:,1], a[:,2] = a[:,2], a[:,1]
array([[ 1, 3, 3],
[11, 13, 13],
[21, 23, 23]])
【问题讨论】:
-
贴出您尝试用来解决此问题的代码。
-
你的预期输出是什么?
-
我已经更新了问题
标签: python arrays numpy image-processing multidimensional-array