给定
>>> a
array([[1, 0, 0, 1],
[1, 1, 1, 0]])
你可以使用numpy.where
>>> np.where(a == 0, 1, 0) # read as (if, then, else)
array([[0, 1, 1, 0],
[0, 0, 0, 1]])
...或者否定a并进行一些类型转换。
>>> (~a.astype(bool)).astype(int)
array([[0, 1, 1, 0],
[0, 0, 0, 1]])
(IPython)时间:差别不大。
>>> a = np.eye(1000, dtype=int)
>>> %timeit np.where(a == 0, 1, 0)
1.56 ms ± 2.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
>>> %timeit (~a.astype(bool)).astype(int)
1.74 ms ± 87.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
其他人回答的时间:
>>> %timeit a^1 # Tls Chris
920 µs ± 31.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
>>> %timeit np.array([1, 0])[a] # Tls Chris
1.4 ms ± 102 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
>>> %timeit (a - 1)*-1 # sacul
1.57 ms ± 13.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
>>> %timeit 1 - a # user3483203
905 µs ± 2.16 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
我的意见:a^1 和 1 - a 干净、优雅、快速。使用 np.where 可以处理您可能想要交换的任何值。