有时我会有一个res.send(Buffer)
数组,我需要从中选择数据,但数据标准只有ND
个维度。举个例子
M < N
现在,我想做
## generate some matrix
test = np.arange(9).reshape((3, 3))
## some condition based on first-dimension only
selectMe = np.array([ True, True, False], dtype=bool)
但这会导致IndexError:
test[selectMe[:, None]]
当然,如果我在第二维上重复布尔索引,一切正常 - 以下是预期的输出:
IndexError: boolean index did not match indexed array along dimension 1; dimension is 3 but corresponding boolean dimension is 1
然而,这是非常低效的。使用test[np.repeat(selectMe[:, None], 3, axis=1)]
Out[41]: array([0, 1, 2, 3, 4, 5])
而不必重复矩阵的自然方式是什么?
答案 0 :(得分:2)
如果我了解您的问题,您可以使用省略号(...
)来涵盖未经过滤的维度:
import numpy as np
test = np.arange(10000).reshape((100, 100))
# condition
selectMe = np.random.randint(0, 2, 100).astype(bool)
assert (test[selectMe, ...].ravel() == test[np.repeat(selectMe[:, None], 100, axis=1)]).all()
%timeit test[selectMe, ...].ravel() # 11.6 µs
%timeit test[np.repeat(selectMe[:, None], 100, axis=1)] # 103 µs