2016-03-25 3 views
1

Я пытаюсь сделать точечный продукт очень больших массивов массива X (35000 x 7500) и Y (7500 x 10). Поскольку скалярное произведение также будет очень большой, я храню его в hdf5Python: Точечный продукт массива dask

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

Но вторая команда не дает никаких выходных данных, даже если его почти 1 час. Что не так? Есть ли более быстрая техника? Есть ли проблема «кусков» при создании X и Y?

ответ

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 является общим и для других форматов.

__setitem__ функция H5Py (то, что вы используете, когда вы говорите f['output'] = ... жестко закодировано использовать Numpy массивы.

Here is the appropriate section in the documentation.

+0

Сэр, я видел ваш ответ [здесь] (http://stackoverflow.com/questions/34434217/why-is-dot-product-in-dask-slower-than-in-numpy). Так как я знаю, какой тип chunking лучше для меня? – Kavan

+0

Метод to_hdf5 будет блокировать ваш набор данных, подобный как ваш dask.array chunked.Я рекомендую просто использовать это. – MRocklin

+0

Мой X имеет float32 и Y float96. Он показывает мне «TypeError: Unsupported float size». Любые подсказки? – Kavan