我有 2 個二維陣列,我想在保留現有維度的同時回傳第二個陣列中不同的所有值。我已經做了一些類似的diff = arr2[np.nonzero(arr2-arr1)]作業來給我不同的元素,但我如何保持元素的尺寸和相對位置?
示例輸入:
arr1 = [[0 1 2] arr2 = [[0 1 2]
[3 4 5] [3 5 5]
[6 7 8]] [6 7 8]]
預期輸出:
diff = [[0 0 0]
[0 5 0]
[0 0 0]]
uj5u.com熱心網友回復:
以下情況如何:
import numpy as np
arr1 = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
arr2 = np.array([[0, 1, 2], [3, 5, 5], [6, 7, 8]])
diff = arr2 * ((arr2 - arr1) != 0)
print(diff)
# [[0 0 0]
# [0 5 0]
# [0 0 0]]
編輯:令我驚訝的是,我的答案的以下第一個版本(由 OP 更正)可能會更快:
diff = arr2 * np.abs(np.sign(arr2 - arr1))
uj5u.com熱心網友回復:
如果它們是 numpy 陣列,你可以這樣做
ans = ar1 * 0
ans[ar1 != ar2] = ar2[ar1 != ar2]
ans
# array([[0, 0, 0],
# [0, 5, 0],
# [0, 0, 0]])
沒有numpy,你可以使用 map
list(map(lambda a, b: list(map(lambda x, y: y if x != y else 0, a, b)), arr1, arr2))
# [[0, 0, 0], [0, 5, 0], [0, 0, 0]]
資料
import numpy as np
arr1 = [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
arr2 = [[0, 1, 2], [3, 5, 5], [6, 7, 8]]
ar1 = np.array(arr1)
ar2 = np.array(arr2)
uj5u.com熱心網友回復:
我很驚訝沒有人提出這種numpy.where方法:
diff = np.where(arr1!=arr2, arr2, 0)
從字面上看,當 arr1 和 arr2 不同時,取 arr2 的值,否則取 0。
輸出:
array([[0, 0, 0],
[0, 5, 0],
[0, 0, 0]])
uj5u.com熱心網友回復:
np.copyto
您可以檢查兩個陣列之間的不等式,然后np.copyto與np.zeros/ 一起使用np.zeros_like。
out = np.zeros(arr2.shape) # or np.zeros_like(arr2)
np.copyto(out, arr2, where=arr1!=arr2)
print(out)
# [[0 0 0]
# [0 5 0]
# [0 0 0]]
np.where
您可以使用np.where和指定x, yargs。
out = np.where(arr1!=arr2, arr2, 0)
# [[0 0 0]
# [0 5 0]
# [0 0 0]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/368025.html
