【发布时间】:2026-01-19 20:50:01
【问题描述】:
想象一个数组a,它必须被idx中的多个范围索引:
In [1]: a = np.array([7,9,1,2,3,5,6,8,1,0,])
idx = np.array([[0,3],[5,7],[8,9]])
a, idx
Out[1]: (array([7, 9, 1, 2, 3, 5, 6, 8, 1, 0]),
array([[0, 3],
[5, 7],
[8, 9]]))
当然,我可以编写一个简单的for 循环,从而产生所需的输出:
In [2]: np.hstack([a[i[0]:i[1]] for i in idx])
Out[2]: array([7, 9, 1, 5, 6, 1])
但我想要一种完全矢量化的方法。例如,我希望np.r_ 能提供一个解决方案。但是下面的代码不会产生所需的输出:
In [3]: a[np.r_[idx]]
Out[3]: array([[7, 2],
[5, 8],
[1, 0]])
而写出idx 确实会产生所需的输出。但是现实生活idx太大写不出来了:
In [4]: a[np.r_[0:3,5:7,8:9]]
Out[4]: array([7, 9, 1, 5, 6, 1])
【问题讨论】:
-
也许这有帮助:*.com/questions/43413582/…
-
感谢您的帮助!问题是,在现实生活中
idx可能会变得非常大,所以写出来不是一种选择 -
不要在希望上使用
np.r_之类的函数。阅读文档。我试图在链接的 SO 中涵盖您的所有选项。要么在切片后连接值,要么在索引之前连接切片。 -
@hpaulj 我对
np.r_的希望是基于写出idx就像a[np.r_[0:3,5:7,8:9]]确实给出了所需的输出,但我只是不知道如何使用@987654337 @ 2D 数组直接在np.r_上。无论如何,感谢您的帮助!但是,我不确定在哪里可以找到您描述的“链接 SO”?
标签: python arrays numpy indexing