【发布时间】:2021-03-23 13:26:49
【问题描述】:
我有一个数据矩阵a,并且我有存储在数组idx 中的索引列表。我想从 idx 定义的每个索引开始获取 10 长度的数据。现在我使用for 循环来实现这一点。但它非常慢,因为我必须在一次迭代中获取大约 1000 次数据。下面是一个最小的工作示例。
import numpy as np
a = np.random.random(1000)
idx = np.array([1, 5, 89, 54])
# I want "data" array to have np.array([a[1:11], a[5:15], a[89:99], a[54:64]])
# I use for loop below but it is slow
data = []
for id in idx:
data.append(a[id:id+10])
data = np.array(data)
有没有办法加快这个过程?谢谢。
编辑:我的问题与here 提出的问题不同。在问题中,与我的问题中的固定块大小相比,块的大小是随机的。存在其他差异。我不必用完整个数组a,并且一个元素可以出现在多个块中。我的问题不一定“拆分”数组。
【问题讨论】:
-
我假设
a是 ones 出于问题的目的,对吗? -
@Ivan 哈哈是的。我已将其编辑为现在具有随机值。
-
这比较棘手,因为有重叠的部分!如果您执行
np.split(a, idx),您将在索引1、5上拆分数组,留下[array of size 1, array of size 4, ...,这不是您想要的结果。
标签: python arrays python-3.x list numpy