Python 需要一些帮助来矢量化图像的代码吗

Python 需要一些帮助来矢量化图像的代码吗,python,numpy,Python,Numpy,有没有办法把这段代码矢量化。它类似于按位和?如果“A”是灰度图像,“B”是二值图像,“C”是与包含零的“A”大小相同的矩阵 for row in range(A.shape[0]): for col in range(A.shape[1]): if B[row, col] == 1: C[row, col] = ~A[row, col] else: C[row, col] = A[row, col] 如果A

有没有办法把这段代码矢量化。它类似于按位和?如果“A”是灰度图像,“B”是二值图像,“C”是与包含零的“A”大小相同的矩阵

for row in range(A.shape[0]):
    for col in range(A.shape[1]):
        if B[row, col] == 1:
            C[row, col] = ~A[row, col]
        else:
            C[row, col] = A[row, col]

如果A、B和C是大小相同的
numpy
数组,则可以对整个数组执行操作,使用与为每个值编写的代码大致相同的代码

因此,您可以执行a
B==1
以获得与
B
大小相同的布尔数组,例如
[True,False,True,False]
。A
C[B==1]
将是
C
B
包含
1
的所有索引处的子数组

总而言之,您可以这样做:

C[B == 1] = ~A[B == 1]
C[B != 1] = A[B != 1]
或者,如果您甚至没有一个
C
开始:

C = A.copy()
C[B == 1] = ~C[B == 1]


顺便说一句,我建议使用
a
b
c
而不是
a
b
c
,因为这是我们在Python中通常命名变量的方式。有关更多信息,请参阅。

如果A、B和C是大小相同的
numpy
数组,则可以对整个数组执行操作,代码与为每个值编写的代码大致相同

因此,您可以执行a
B==1
以获得与
B
大小相同的布尔数组,例如
[True,False,True,False]
。A
C[B==1]
将是
C
B
包含
1
的所有索引处的子数组

总而言之,您可以这样做:

C[B == 1] = ~A[B == 1]
C[B != 1] = A[B != 1]
或者,如果您甚至没有一个
C
开始:

C = A.copy()
C[B == 1] = ~C[B == 1]

顺便说一句,我建议使用
a
b
c
而不是
a
b
c
,因为这是我们在Python中通常命名变量的方式。有关更多信息,请参阅。

我会使用以下方法:

我会使用:


试试
C[B==1]=~A
C[B!=1]=A
,看看是怎么回事。@zvone我遇到了这个错误“NumPy布尔数组索引赋值需要0或1维输入,输入有2维”啊,好的,我会写一个答案:)@zvone使用你的逻辑我试过使用NumPy.putmask(C,B,A)但它没有给出我想要的结果。有什么建议吗?@MichaelSzczesny对不起,我现在改了,试试
C[B==1]=~A
C[B!=1]=A
,看看情况如何。@zvone我遇到了这个错误“NumPy布尔数组索引分配需要0或1维输入,输入有2维”啊,好的,我会写一个答案:)@zvone用你的逻辑我试着用NumPy.putmask(C,B,A)但它没有给出我想要的结果。有什么建议吗?@MichaelSzczesny抱歉,我现在更改了它不是
A[B==1]
A拼写错误吗?似乎应该是
A[B!=1]
@JohnZwinck True。修复。谢谢。:)不是
A[B==1]
A拼写错误吗?看起来应该是
A[B!=1]
@JohnZwinck True。固定的。谢谢。:)