假設我有一個 numpy 數組,我想將所有 1 交換為 0,將所有 0 交換為 1(該數組將具有其他值,并且 0 和 1 沒有什么特別之處)。當然,我可以循環遍歷數組并逐個更改它。您可以推薦使用一種有效的方法嗎?np.where() 方法是否有此操作的選項?
3 回答

呼啦一陣風
TA貢獻1802條經驗 獲得超6個贊
這是一種使用np.where, 并在XOR給定值是0或時按位取值的方法1:
np.where((a==0)|(a==1), a^1, a)
例如:
a = np.array([[0,1,2,1], [1,2,0,3]])
print(a)
array([[0, 1, 2, 1],
[1, 2, 0, 3]])
np.where((a==0)|(a==1), a^1, a)
array([[1, 0, 2, 0],
[0, 2, 1, 3]])

犯罪嫌疑人X
TA貢獻2080條經驗 獲得超4個贊
這是 np.where 的一個不太聰明的選擇,只是將它用于索引:
where_0 = np.where(arr == 0)
where_1 = np.where(arr == 1)
arr[where_0] = 1
arr[where_1] = 0
如果您對其他值有更多了解(例如它們都是小數字),可能會有更多選擇,但這是最簡單的。

婷婷同學_
TA貢獻1844條經驗 獲得超8個贊
a^(a&1==a)
例如
a = np.arange(-3, 4)
a^(a&1==a)
# array([-3, -2, -1, 1, 0, 2, 3])
添加回答
舉報
0/150
提交
取消