与所有其他解决方案相比,一种更优雅的方法是只使用^{}>>> arr
array([[12, 35, 12, 26],
[35, 35, 12, 26]])
# get the result as binary matrix
>>> np.isin(arr, 35).astype(np.uint8)
array([[0, 1, 0, 0],
[1, 1, 0, 0]])
^{}将返回一个带有True值的布尔掩码,其中给定元素(这里是35)存在于原始数组中,False在其他地方。在
另一个变体是使用数据类型为^{}的^{}来转换布尔结果,以获得更好的速度:
^{pr2}$
标杆管理
通过显式地将布尔结果转换为^{},我们可以获得3倍以上的性能。(感谢@Divakar指出这一点!)参见下面的计时:# setup (large) input array
In [3]: x = np.arange(25000000)
In [4]: x[0] = 35
In [5]: x[1000000] = 35
In [6]: x[2000000] = 35
In [7]: x[-1] = 35
In [8]: x = x.reshape((5000, 5000))
# timings
In [20]: %timeit np.where(x==35, 1, 0)
427 ms ± 25.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [21]: %timeit