Загрузка разреженной матрицы Matlab, сохраненной с помощью -v7.3 (HDF5), в Python и работа с ней
-
28-10-2019 - |
Вопрос
Я новичок в 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