通过一长串数组的最快方法

时间:2017-04-05 21:14:07

标签: python numpy h5py

我有一个hdf5文件中电生理记录的数据集,其形式是我理解的非常接近numpy数组的形式,我想要做的是以最有效和快速的方式访问它。

让我解释一下:数据集是一个数组列表(2D数组?);每个数组包含x个通道(记录站点),通常在32-64左右。

问题如下:有数百万个阵列,它需要永远循环遍历每个阵列。此外,我必须遍历每个数组中的每个通道,以便检索值。

这是我的代码:

with(Physics)

Setup(mathematicalnotation = true);
Coordinates(X);

Setup(spaceindices = lowercaselatin)

Setup(tensors = q[mu](X))

PDEtools:-declare(q(X))

Setup(tensors = qp[mu](X))

PDEtools:-declare(qp(X))

有没有办法让它更高效,更快捷? 我是否必须使用numpy?如果是这样,我该如何实现?我觉得我在这里做错了。

编辑: 以下是有关以下属性的数据集中第一个数组的其他信息:

  

.shape - > (42)
  .itemsize - > 2
  .dtype - > INT16
  .size - > 42个
  .ndim - > 1

EDIT2: ..和数据集本身:

  

.shape - > (31646700,42)
  .dtype - > INT16
  .size - > 1329161400

2 个答案:

答案 0 :(得分:1)

如果我猜t_stamp是一个不同长度的1d数组,您可以使用以下方法收集所有元素>

list_value = []
for t_stamp in (dset_data):
    list_value.append(t_stamp[t_stamp>400])
    # list_value.extend()

如果要收集子列表中的值,请使用append。如果你想要一个平面列表,请使用extend。

它仍会在dset_data的'行'上进行迭代,但每行的选择会更快。

如果所有行都是42长,那么dset_data.value将是一个2d numpy数组:

dset_data[dset_data>400]

将是所选值的平面数组

答案 1 :(得分:0)

这可能会有所帮助。第一次改变到1d arry;第二个排序;第三个找到数字索引。在这种情况下,您需要迭代所有项目。

import numpy as np

newData = dset_data.ravel()
newData.sort()
index = np.searchsorted(data,400)
res = newData[:index ]