让我们说我有一个numpy数组,我想将所有的1交换为0,将所有的0交换为1(该数组将具有其他值,而0和1并没有什么特别的)。当然,我可以循环遍历该数组,并按1对其进行更改。是否有推荐的有效方法? np.where()方法是否有此操作的选项?
答案 0 :(得分:9)
这是使用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]])
答案 1 :(得分:2)
对于np.where来说,这是一个不太聪明的选项,仅用于索引:
where_0 = np.where(arr == 0)
where_1 = np.where(arr == 1)
arr[where_0] = 1
arr[where_1] = 0
如果您对其他值了解更多(例如,它们都是很小的数字),则可能会有更多选择,但这是最简单的。
答案 2 :(得分:2)
一种非常简单的方法,不需要使用任何特殊方法,例如np.where()
,就是获取numpy
数组中变量条件的索引,并相应地分配所需的值(在您的情况下,0
的{{1}}和1s
的{{1}})到数组中的各个位置项。这也适用于1
和0s
以外的其他值。另外,您不需要任何临时变量即可交换值。
0s
答案 3 :(得分:2)
a^(a&1==a)
例如
a = np.arange(-3, 4)
a^(a&1==a)
# array([-3, -2, -1, 1, 0, 2, 3])
答案 4 :(得分:0)
iverted = ~arr + 2
应该做的工作