带有 Dask 数组的循环 and/or h5py
For loops with Dask arrays and/or h5py
我有一个超过一亿行数据的时间序列。我正在尝试重塑它以包含时间 window。我的示例数据的形状为 (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))
任何明智的想法表示赞赏。
这不一定能解决您的问题,但作为 munge
的一种更快的替代方法,您可以改为使用 numpy 的 stride_tricks
创建数据的滚动视图(基于示例here)。
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
as_strided
需要非常小心地使用 - 这是一个 'advanced' 功能,不正确的参数很容易导致你陷入段错误 - 请参阅 docstring
我有一个超过一亿行数据的时间序列。我正在尝试重塑它以包含时间 window。我的示例数据的形状为 (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))
任何明智的想法表示赞赏。
这不一定能解决您的问题,但作为 munge
的一种更快的替代方法,您可以改为使用 numpy 的 stride_tricks
创建数据的滚动视图(基于示例here)。
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
as_strided
需要非常小心地使用 - 这是一个 'advanced' 功能,不正确的参数很容易导致你陷入段错误 - 请参阅 docstring