lea*_*ner 7 python arrays numpy list python-3.x
我有一个数据矩阵,a并且我有存储在 array 中的索引列表idx。我想从idx. 现在我使用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)
Run Code Online (Sandbox Code Playgroud)
有没有办法加快这个过程?谢谢。
编辑:我的问题与这里提出的问题不同。在问题中,与我的问题中的固定块大小相比,块的大小是随机的。存在其他差异。我不必用完整个数组a,一个元素可以出现在多个块中。我的问题不一定“拆分”数组。
(感谢@MadPhysicist 的建议)
这应该有效:
a[idx.reshape(-1, 1) + np.arange(10)]
Run Code Online (Sandbox Code Playgroud)
输出:
Shape (L,10),其中L是长度idx
笔记:
这不会检查索引超出范围的情况。我想很容易首先确保idx不包含这些值。
Usingnp.take(a, idx.reshape(-1, 1) + np.arange(10), mode='wrap')是一种替代方法,它将通过将它们包装在a. 传递mode='clip'而不是mode='wrap'将过多的索引剪辑到 的最后一个索引a。但是,np.take()可能会有完全不同的性能。特性/缩放特性。
| 归档时间: |
|
| 查看次数: |
229 次 |
| 最近记录: |