Загрузка разреженной матрицы Matlab, сохраненной с помощью -v7.3 (HDF5), в Python и работа с ней

StackOverflow https://stackoverflow.com/questions/8403144

Вопрос

Я новичок в Python, перехожу из Matlab.У меня есть большая разреженная матрица, сохраненная в формате Matlab v7.3 (HDF5).До сих пор я нашел два способа загрузки файла, используя h5py и tables.Однако и после этого работа с матрицей кажется очень медленной.Например, в Matlab:

родовое слово

Использование таблиц:

родовое слово

Использование h5py:

родовое слово

(Я перестал ждать ...)

[РЕДАКТИРОВАТЬ]

Основываясь на комментариях от @bpgergo, я должен добавить, что я пытался преобразовать результат, загруженный с помощью h5py (f), в массив numpy или разреженный массив scipy двумя следующими способами:

родовое слово

или

родовое слово

, но обе эти операции тоже очень медленные.

Что-то мне здесь не хватает?

Это было полезно?

Решение

Большая часть вашей проблемы заключается в том, что вы используете python sum для того, что фактически является массивом с отображением памяти (то есть на диске, а не в памяти).

Во-первых, вы сравниваете время, необходимое для чтения данных с диска, со временем, которое требуется для чтения данных в памяти.Сначала загрузите массив в память, если хотите сравнить с тем, что делаете в Matlab.

Во-вторых, встроенный в Python код sum очень неэффективен для массивов numpy.(Или, скорее, итерация по каждому элементу массива numpy по отдельности очень медленная, что и делает встроенный в python sum.) Для массивов numpy используйте numpy.sum(yourarray) или yourarray.sum().

В качестве примера:

(Использование кода h5py, потому что я более знаком с ним.)

родовое слово

Другие советы

Окончательный ответ для потомков:

родовое слово

Вам не хватает нескольких http://www.scipy.org/NumPy_for_Matlab_Users

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top