Ограничить измерение существующего memmap (NumPy) - PullRequest
0 голосов
/ 05 июля 2018

У меня есть файл .dat, содержащий большой (600000,6,8000) массив с плавающей запятой, созданный с помощью numpy.memmap.

Третья ось представляет диапазон дат. Во время выполнения пользователь указывает более узкий диапазон дат. В результате я получаю нарезку по 3-му измерению array[i, :, user_start:user_end] миллиона раз во время выполнения.

Я знаю, что возможно сместить memmap на фиксированное число, но есть ли способ ограничить размеры массива в начале цикла, чтобы мне не нужно было каждый раз разрезать третью ось?

1 Ответ

0 голосов
/ 05 июля 2018

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

Если a - это отображенный массив памяти, определите

b = a[:, :, user_start:user_end]

, а затем используйте b вместо многократного создания одного и того же среза a. То есть вместо a[i, :, user_start:user_end] используйте b[i, :, :] (или b[i, :] или даже просто b[i], поскольку последний : в индексе с нулевым числом является необязательным).

...