0

我有 NumPy N 维 bool 数组b

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

什么是最短的单线转换ib.

当然,它可以多行完成:

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

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

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

此外,我希望解决方案与上述两行代码一样高效(CPU/RAM 方面)或几乎一样高效。不仅仅是任何低效的单线。

4

1 回答 1

0

可以记住,它不是最优的,但对于 100K 元素的数组,对于 oneliner 来说,差异是可以的。

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

对一维数组执行此操作要容易得多,上面的代码适用于 N 维

于 2020-11-03T16:38:28.730 回答