用值替换数组的numpy数组

用值替换数组的numpy数组,numpy,replace,Numpy,Replace,我正在尝试转换数组的numpy数组。输入示例如下: np.array([[0,0,0],[255,255,255],[255,255],[0,0,0]],np.uint8) 我想用[0,0,0]值替换所有数组,用0替换[255,255,255]值替换255。我希望最终结果采用以下格式: np.array([[0,255],[255,0]],np.uint8) 数组将始终具有上述值,但大小不同 这是我为此创建的代码: array_list=[] 对于输入图像中的行: 行列表=[] 对于第行中的

我正在尝试转换数组的numpy数组。输入示例如下:

np.array([[0,0,0],[255,255,255],[255,255],[0,0,0]],np.uint8)
我想用
[0,0,0]
值替换所有数组,用
0
替换
[255,255,255]
值替换
255
。我希望最终结果采用以下格式:

np.array([[0,255],[255,0]],np.uint8)
数组将始终具有上述值,但大小不同

这是我为此创建的代码:

array_list=[]
对于输入图像中的行:
行列表=[]
对于第行中的项目:
如果np.数组_相等(项[0,0,0]):
行列表。追加(0)
其他:
行列表。追加(255)
数组\列表。追加(行\列表)
输出图像=np.array(数组列表,np.uint8)

上面的代码对于大型数组来说非常慢,我想可能有一种方法可以直接用numpy实现这一点,尽管我找不到方法。对于如何更有效地执行此操作,您有什么建议吗?

对于要沿第三个轴减少的多维数组,您将显示哪些内容。这是一种常见的操作。但是,您希望如何处理其他值,例如
[1,128,32]
,或者甚至
[255,0,0]
?我没有任何其他值,因为我正在使用以下内容进行修复:
input\u image=np。其中(input\u image!=255,0,input\u image)
,这并不保证您没有将say
[255,0,255]
作为值。你打算如何处理这个问题?如果输入的是
a
,你可以使用
a[:,:,0]
,或者
a[…,0]
。是的,你是对的,我没有想到这一点,尽管这在我的应用程序中不会有问题。我只想将一些黑白图像转换为OpenCV的遮罩。只需取第三个轴的平均值。如果numpy是可以避免的,就不要重复它。它总是可以避免的。我唯一没有找到完全向量化的解决方案的时候,我想用不同的系数来解决多个同时最小二乘问题。
X_new = np.mean(X, axis=2)
X_new
array([[  0., 255.],
       [255.,   0.]])