Индексы разделяют данные строки в NumPy - PullRequest
0 голосов
/ 13 мая 2018

Я работаю с массивом numpy, который довольно плотный (например, 20-50%), но имеет большие области, которые имеют одинаковое значение. Например, у меня может быть массив что-то вроде:

[[0 0 0 0]
 [1 2 3 4]
 [0 0 0 0]
 [3 4 5 6]]

Вместо того, чтобы хранить строки, заполненные одинаковыми значениями (строка 0) как отдельные строки в памяти, есть ли способ разделить память строк так, чтобы строки 0 и 2 обращались к одной и той же памяти? Я ищу что-то, что либо встроено в NumPy или позволит нормальным NUMPY функции работать с таким массивом. Мне нужно, чтобы это выглядело так, как будто я все еще использую массив numpy.

Несколько заметок:

Я знаю, что я могу просто создать объект в Python, который просто отображает входные индексы на их индекс данных в некотором массиве numpy, но я также хочу, чтобы этот объект обрабатывался как массив numpy, поэтому я могу вызывать на нем функции numpy .

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

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Если вы просто хотите сэкономить память, возможно, вам поможет игра с dtype.Я понятия не имею, быстрее это или медленнее ...

from sys import getsizeof
>>> arr2 = np.ones((1000,1000))
>>> getsizeof(arr2)
8000112
>>> arr2 = np.ones((1000,1000),dtype='>i2')
>>> getsizeof(arr2)
2000112

Но если вы хотите рассчитать с плавающей запятой, вы можете попробовать также dtype = 'single', если высокая точность не требуется.

0 голосов
/ 13 мая 2018

Не возможно.Вы можете обрабатывать некоторые функции NumPy с помощью класса, который реализует __array_ufunc__, но он обрабатывает только ufuncs.Вам нужно было бы выполнить индексацию самостоятельно, и для большей части остальных NumPy вы бы застряли с опциями, которые в лучшем случае неявно преобразуют ваш объект в реальный, плотный массив.

scipy.sparse sparseМатрицы ближе всего подходят к встроенному параметру, но даже в этом случае разреженные матрицы несовместимы с большинством функций NumPy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...