【发布时间】:2021-02-12 09:51:25
【问题描述】:
我正在寻找一种方法,可以在给定索引数组的情况下多次从 numpy 数组中选择多行。
鉴于M 和indexes,我希望N 避免for 循环,因为它对于大尺寸来说很慢。
import numpy as np
M = np.array([[1, 0, 1, 1, 0],
[1, 1, 1, 1, 0],
[0, 0, 0, 1, 1],
[1, 0, 0, 1, 1]])
indexes = np.array([[True, False, False, True],
[False, True, True, True],
[False, False, True, False],
[True, True, False, True]])
N = [M[index] for index in indexes]
Out:
[array([[1, 0, 1, 1, 0],
[1, 0, 0, 1, 1]]),
array([[1, 1, 1, 1, 0],
[0, 0, 0, 1, 1],
[1, 0, 0, 1, 1]]),
array([[0, 0, 0, 1, 1]]),
array([[1, 0, 1, 1, 0],
[1, 1, 1, 1, 0],
[1, 0, 0, 1, 1]])]
【问题讨论】:
-
你得到一个形状不同的数组列表这一事实强烈表明这个列表理解是你能做的最好的。
-
Numpy 在处理同质数据时通常处于最佳状态,而您的预期输出却不是。循环似乎是这里的最佳选择。
-
@hpaul 的列表理解真的比
np.split更好吗?
标签: python arrays numpy numpy-ndarray numpy-slicing