Выбор квадратной подматрицы из большого файла h5

У меня есть большой файл h5 (50 ГБ). Мне нужно извлечь квадратную подматрицу из файла. Пока мой код:

import h5py
import random 

file = h5py.File('numDistances.h5', 'r')
data = file['DS1'] # 120,000 x 120,000 matrix

randomRows = random.sample(range(110000), 40000)
randomRows.sort()

# Get the rows first and then the corresponding columns:
rows = data[randomRows, :]
output = rows[:,randomRows]

К сожалению, извлечение данных таким образом происходит очень медленно. Знаете ли вы какие-либо методы нарезки/дополнительные библиотеки, которые могли бы помочь мне сделать это намного быстрее, спасибо.


person kPow989    schedule 30.12.2017    source источник
comment
Я предполагаю, что вы читали документы об этом типе индексации? Поскольку randomRows разбросан по большому файлу, ему придется много работать с файлом seek. docs.h5py.org/en/latest/high/dataset. html#fancy-indexing. Может помочь использование небольших выборок, которые объединяются в фрагменты, docs.h5py. org/en/latest/high/dataset.html#chunked-storage   -  person hpaulj    schedule 30.12.2017
comment
Спасибо. Я прочитал документы, но обнаружил, что даже попытка с небольшим количеством строк (100) будет довольно медленной.   -  person kPow989    schedule 30.12.2017
comment
Еще один недавний вопрос о перетасовке строк. Я предложил читать срезы и выполнять причудливую индексацию массива в памяти.   -  person hpaulj    schedule 30.12.2017
comment
stackoverflow.com/questions/47888392/   -  person hpaulj    schedule 30.12.2017
comment
У вас есть фрагментированный или сжатый набор данных? В таких случаях вы должны установить правильный размер кеша. Некоторые примеры stackoverflow.com/a/44961222/4045774 stackoverflow.com/a/43580434/4045774   -  person max9111    schedule 02.01.2018