Python 需要一些帮助来矢量化图像的代码吗
有没有办法把这段代码矢量化。它类似于按位和?如果“A”是灰度图像,“B”是二值图像,“C”是与包含零的“A”大小相同的矩阵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
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
数组,则可以对整个数组执行操作,使用与为每个值编写的代码大致相同的代码
因此,您可以执行aB==1
以获得与B
大小相同的布尔数组,例如[True,False,True,False]
。AC[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
数组,则可以对整个数组执行操作,代码与为每个值编写的代码大致相同
因此,您可以执行aB==1
以获得与B
大小相同的布尔数组,例如[True,False,True,False]
。AC[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。固定的。谢谢。:)