NumPy-在一行中将索引转换为布尔值

问题描述

我有NumPy N维布尔数组b

它被True转换为i = np.nonzero(b)值的索引。

i转换回b的最短单线是什么。

原因可以通过以下几种方式完成:

b = np.zeros(b_shape,dtype = np.bool_)
b[i] = True

显然,单行可以通过;级联线或其他一些元组/ lambda魔术来实现,或者通过定义单独的函数来实现。

但是我真正想要的是找到一些内置的NumPy函数,例如b = np.indices_to_bools(i,shape = b_shape)或找出一些内置函数的漂亮叠加。因此该解决方案可以嵌入到更大的复杂表达式中。

我还希望解决方案能够像上述两行代码一样高效(在cpu / RAM方面)或几乎一样高效。不仅是效率低下的一线客。

解决方法

请记住,这并不是最佳选择,但对于100K元素的数组,单行衬里的区别是可以的。

b = np.in1d(np.arange(b.size),np.ravel_multi_index(i,dims=b.shape))

对于一维数组,这样做要容易得多,上面的代码适用于N维