【发布时间】:2020-02-07 09:58:14
【问题描述】:
我有一个大小为 (d1,d2,d3,d4) 的 4 维数组,以及一个包含 k 条目的索引列表。索引列表的每个元素都有 3 个元素。第一个是数组第一维的索引。第二个和第三个对应于第 3 和第 4 维的切片的开始,其中切片长度是固定数字n。从数组的第二维开始,我总是想要所有元素。
最后我想要一个大小为(k,d3,n,n)的新数组。出于性能原因,我想在没有 for 循环的情况下执行此操作,并且如果可能的话不进行数据复制。
以下解决方案有效,但使用 for 循环并复制数据:
d1,d2,d3,d4 = 3,4,10,10
data = np.arange(d1*d2*d3*d4).reshape((d1,d2,d3,d4))
idcs_all = [[0,4,6],
[2,2,5]]
n = 3
k=len(idcs_all)
sub = np.zeros((k,d2,n,n))
for i, idcs in enumerate(idcs_all):
sub[i] = data[idcs[0],:, idcs[1]:idcs[1]+n, idcs[2]:idcs[2]+n]
有没有办法对花哨的索引做同样的事情?
【问题讨论】:
-
@Logica 我们不应该过度使用标签。事实上,我可能会删除
arrays标签。