Python 对于具有Dask阵列和/或h5py的环路

Python 对于具有Dask阵列和/或h5py的环路,python,numpy,dask,h5py,Python,Numpy,Dask,H5py,我有一个超过一亿行数据的时间序列。我正试图改变它,以包括一个时间窗口。我的示例数据是形状的(79499,9),我正在尝试将其重塑为(79979,10,9)。以下for循环在numpy中运行良好 def munge(data, backprop_window): result = [] for index in range(len(data) - backprop_window): result.append(data[index: index + backprop_

我有一个超过一亿行数据的时间序列。我正试图改变它,以包括一个时间窗口。我的示例数据是形状的(79499,9),我正在尝试将其重塑为(79979,10,9)。以下for循环在numpy中运行良好

def munge(data, backprop_window):
    result = []
    for index in range(len(data) - backprop_window):
       result.append(data[index: index + backprop_window])
    return np.array(result)

X_train = munge(X_train, backprop_window)
我尝试了dask的一些变体,但所有这些变体似乎都挂起,没有给出任何错误消息,包括:

import h5py
import dask.array as da
f1 = h5py.File("data.hdf5")
X_train = f1.create_dataset('X_train',data = X_train, dtype='float32') 
x = da.from_array(X_train, chunks=(10000, d.shape[1]))
result = x.compute(munge(x, backprop_window))

任何明智的想法都值得赞赏

这并不一定能解决您的dask问题,但作为
munge
的一个更快的替代方案,您可以使用numpy的
跨步技巧
创建数据滚动视图(基于示例)


随着时间的推移
需要非常小心地使用-这是一项“高级”功能,不正确的参数很容易导致出现故障-请参阅

谢谢@chrisb。我在桌上的时候会试试这个。
def munge_strides(data, backprop_window):
    """ take a rolling view into array by manipulating strides """
    from numpy.lib.stride_tricks import as_strided
    new_shape = (data.shape[0] - backprop_window,
                 backprop_window,
                 data.shape[1])
    new_strides = (data.strides[0], data.strides[0], data.strides[1])
    return as_strided(data, shape=new_shape, strides=new_strides)

X_train = np.arange(100).reshape(20, 5)

np.array_equal(munge(X_train, backprop_window=3),
               munge_strides(X_train, backprop_window=3))
Out[112]: True