问题描述
我有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维