Как эффективно определить массив numy с переменным размером? - PullRequest
0 голосов
/ 20 сентября 2018

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

Мое решение состоит в том, чтобы определитьперечислите (или кортеж) как:

test = [0] * 10

, а затем определите каждый элемент "теста" с массивом numpy как:

test[0] = numpy.array([1,2,3])
test[1] = numpy.array([4,5])
...

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

Итак, я был бы признателен за помощь, если есть эффективный способ определить такие массивы смодуль numpy?

1 Ответ

0 голосов
/ 20 сентября 2018

Вы можете создать одно большое выделение за кулисами и создать несколько меньших представлений:

backing = np.empty(10, np.int32)
my_data = [
    backing[0:2],
    backing[2:5],
    backing[5:10]
]

my_data[0][...] = [1, 3]
my_data[1][...] = [1, 3, 5]
my_data[2][...] = [1, 3, 5, 7, 9]
print(my_data)
# [array([1, 3]), array([1, 3, 5]), array([1, 3, 5, 7, 9])]

Это имеет приятный бонус, что вы все равно можете работать с плоским массивом при необходимости:

backing += 1  # add to all sublists
print(my_data)
# [array([2, 4]), array([2, 4, 6]), array([ 2,  4,  6,  8, 10])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...