【发布时间】:2017-09-06 04:35:00
【问题描述】:
我想使用某种类型的索引数组(索引数组的样式/格式开放供建议)从基本数组中获取一个 numpy 子数组数组。我可以使用 for 循环轻松做到这一点,但想知道是否有一种巧妙的方法来使用 numpy 广播?
约束:保证子数组大小相同。
up_idx = np.array([[0, 0],
[0, 2],
[1, 1]])
lw_idx = np.array([[2, 2],
[2, 4],
[3, 3]])
base = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
samples = []
for index in range(up_idx.shape[0]):
up_row = up_idx[index, 0]
up_col = up_idx[index, 1]
lw_row = lw_idx[index, 0]
lw_col = lw_idx[index, 1]
samples.append(base[up_row:lw_row, up_col:lw_col])
samples = np.array(samples)
print(samples)
> [[[ 1 2]
[ 5 6]]
[[ 3 4]
[ 7 8]]
[[ 6 7]
[10 11]]]
我试过了:
vector_s = base[up_idx[:, 0]:lw_idx[:, 1], up_idx[:, 1]:lw_idx[:, 1]]
但这似乎是荒谬的。
【问题讨论】:
-
up_pt长什么样子?形状? -
很抱歉。我在发布之前更改了变量并且显然错过了。
标签: performance python-2.7 numpy vectorization array-broadcasting