python 合并按整数和按布尔numpy切片

tf7tbtn2  于 2023-03-07  发布在  Python
关注(0)|答案(1)|浏览(104)

我正在寻找一种方法来组合两个索引数组bi(一个是boolean类型,一个是integer类型)来切片另一个数组x

x = np.array([5.5, 6.6, 3.3, 7.7, 8.8])
i = np.array([1, 4])
b = np.array([True, True, False, False, False])

得到的数组应该是x == [6.6],因为它是按ii[0])和b[1]中的值索引的。
换句话说,我正在寻找一种方法来表示x[i & b],其中i是一个整数数组,我知道如何将布尔索引数组转换为整数索引数组(np.where(b)),但这只会将问题转移到组合两个整数索引数组上,对此我也没有解决方案。
显然,后续切片不起作用(即x[i][b],反之亦然),因为维度在每次单独切片后都会改变。
任何帮助都将不胜感激。

xu3bshqb

xu3bshqb1#

一种O(n)方法是将索引数组i转换为布尔数组,然后 * 取&

b_i = np.zeros_like(b)
b_i[i] = True

output = x[b_i & b]

此方法推广到所有逻辑运算符(例如&|,...)。
一种更有效的内存方法是将相同的索引操作i应用于b

output = x[i][b[i]]

# For the example in the question,
# x[i] == [6.6, 8.8]
# b[i] == [True, False]

相关问题