【问题标题】:Python : Dot product of dask arrayPython:dask数组的点积
【发布时间】:2016-07-13 07:21:11
【问题描述】:

我正在尝试做非常大的 2 个 dask 数组 X (35000 x 7500) 和 Y(7500 x 10) 的点积。由于点积也将非常大,我将其存储在 hdf5 中

f = h5py.File('output.hdf5')
f['output'] = X.dot(Y)

但是第二个命令即使将近 1 个小时也没有给出任何输出。怎么了?有更快的技术吗?创建 X 和 Y 时是否存在“块”问题?

【问题讨论】:

    标签: python hdf5 h5py dask


    【解决方案1】:

    考虑.to_hdf5 方法或da.store 函数。

    >>> X.dot(Y).to_hdf5('output.hdf5', 'output')
    

    >>> output = f.create_dataset('/output', X.dot(Y).shape, X.dot(Y).dtype)
    >>> da.store(X.dot(Y), output)
    

    to_hdf5 方法对您来说可能更容易。 da.store 方法也适用于其他格式。

    H5Py 中的 __setitem__ 函数(当您说 f['output'] = ... 时使用的是硬编码以使用 NumPy 数组。

    Here is the appropriate section in the documentation.

    【讨论】:

    • 先生,我看到了您的回答here。那么我怎么知道哪种类型的分块最适合我呢?
    • to_hdf5 方法将分块您的数据集,类似于分块 dask.array 的方式。我建议只使用它。
    • 我的 X 是 float32 和 Y float96。它向我显示“TypeError: Unsupported float size”。有什么线索吗?
    • 我不知道 NumPy 支持 dtype float96。也许试试 float64 或 128?
    • 我改成了float64。它说“ValueError:块不对齐”
    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2013-07-16
    • 1970-01-01
    相关资源
    最近更新 更多