我在下面有以下 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]
uj5u.com熱心網友回復:
如果您只是嘗試使用串列推導優化 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
uj5u.com熱心網友回復:
你做的串列壓縮是錯誤的。
如果你想
output = [scaler * (i1-i2)**2 if i1 > i2 else 0 for (i1, i2) in zip(input1, input2)]
print(output)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/366017.html
上一篇:C性能:宏與常量
