gpt4 book ai didi

python - 从 numpy 数组中采样固定长度的序列

转载 作者:行者123 更新时间:2023-12-04 04:30:27 29 4
gpt4 key购买 nike

我有一个数据矩阵 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并且一个元素可以出现在多个块中。我的问题不一定“拆分”数组。

最佳答案

(感谢@MadPhysicist 的建议)
这应该有效:

a[idx.reshape(-1, 1) + np.arange(10)]
输出:
形状 (L,10) ,其中 Lidx 的长度
备注:
  • 这不会检查索引超出范围的情况。我想很容易首先确保 idx不包含这样的值。
  • 使用 np.take(a, idx.reshape(-1, 1) + np.arange(10), mode='wrap')是一种替代方法,它将通过将索引包裹在 a 周围来处理越界索引。 .路过mode='clip'而不是 mode='wrap'会将过多的索引剪裁到 a 的最后一个索引.但是,np.take()可能会有完全不同的性能。特性/缩放特性。
  • 关于python - 从 numpy 数组中采样固定长度的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65263059/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com