如何修复错误'bitwise_and'列表理解并优化for循环?



我有下面的for循环,但我想把它变成一个计算效率更高的变体。我以为我可以通过列表理解来做到这一点,但这给了我以下错误:TypeError: ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

编辑一:我正在尝试比较input1和input2,如果input1大于input2,那么应该用缩放器对差值进行平方和缩放。否则,应该为输出指定一个值零。

我该如何解决这个问题,还有其他方法可以进一步加快速度吗?

# Input variables
input1 = np.array([0.5, 1, 3, 7, 10])
input2 = np.array([0.5, 1.5, 2, 7, 8])
scaler = 3
# For loop
output = np.zeros(len(input1))
for i in range(len(input1)):
if input1[i] > input2[i]:
output[i] = scaler * (input1[i] - input2[i])**2  
else: 
output[i] = 0      
# List comprehension attempt, but gives error.
output = [scaler * (input1-input2)**2 for i in input1 & input2 if input1 > input2]  

如果您仅试图通过列表理解优化for循环,则以下内容等效:

# Input variables
input1 = np.array([0.5, 1, 3, 7, 10])
input2 = np.array([0.5, 1.5, 2, 7, 8])
scaler = 3
# List comprehension
output = [scaler * (x-y)**2 if x>y else 0 for (x,y) in zip(input1,input2)]

编辑:这可能更快,因为numpy可以矢量化操作

# Numpy operations
arr = input1-input2
arr = arr.clip(min=0)
output = scaler * arr ** 2

您的列表压缩操作错误。

如果你想

output = [scaler * (i1-i2)**2 if i1 > i2 else 0 for (i1, i2) in zip(input1, input2)]
print(output)

最新更新