【发布时间】:2021-08-14 11:30:38
【问题描述】:
当只给出所需范围的索引时,我正在寻找一种有效的方法来索引具有多个范围的 numpy 数组的列。
例如,给定以下数组,范围大小为r_size=3:
import numpy as np
arr = np.arange(18).reshape((2,9))
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8],
[ 9, 10, 11, 12, 13, 14, 15, 16, 17]])
这意味着总共有 3 组范围 [r0, r1, r2],它们在数组中的元素分布为:
[[r0_00, r0_01, r0_02, r1_00, r1_01, r1_02, r2_00, r2_01, r2_02]
[r0_10, r0_11, r0_12, r1_10, r1_11, r1_12, r2_10, r2_11, r2_12]]
因此,如果我想访问r0 和r2 范围,那么我将获得:
arr = np.arange(18).reshape((2,9))
r_size = 3
ranges = [0, 2]
# --------------------------------------------------------
# Line that index arr, with the variable ranges... Output:
# --------------------------------------------------------
array([[ 0, 1, 2, 6, 7, 8],
[ 9, 10, 11, 15, 16, 17]])
我发现最快的方法如下:
import numpy as np
from itertools import chain
arr = np.arange(18).reshape((2,9))
r_size = 3
ranges = [0,2]
arr[:, list(chain(*[range(r_size*x,r_size*x+r_size) for x in ranges]))]
array([[ 0, 1, 2, 6, 7, 8],
[ 9, 10, 11, 15, 16, 17]])
但我不确定在速度方面是否可以提高。
提前致谢!
【问题讨论】:
标签: python numpy indexing range