Как добавить строки и столбцы в массив NUMPY? - PullRequest
6 голосов
/ 15 декабря 2009

Здравствуйте, у меня есть 1000 рядов данных с 1500 баллами в каждом.

Они образуют массив Numpy размера (1000x1500), созданный с помощью np.zeros ((1500, 1000)) и затем заполненный данными.

А что если я хочу, чтобы массив вырос до 1600 x 1100? Нужно ли добавлять массивы, используя hstack и vstack, или есть лучший способ?

Я бы хотел, чтобы данные, уже находящиеся в части массива 1000x1500, не менялись, в основном только пустые данные (нули), добавленные снизу и справа, в основном.

Спасибо.

Ответы [ 4 ]

8 голосов
/ 16 декабря 2009

Это должно делать то, что вы хотите ( т.е. , используя массив 3x3 и массив 4x4 для представления двух массивов в OP)

>>> import numpy as NP
>>> a = NP.random.randint(0, 10, 9).reshape(3, 3)
>>> a
>>> array([[1, 2, 2],
           [7, 0, 7],
           [0, 3, 0]])

>>> b = NP.zeros((4, 4))

отображение a на b:

>>> b[:3,:3] = a

>>> b
    array([[ 1.,  2.,  2.,  0.],
           [ 7.,  0.,  7.,  0.],
           [ 0.,  3.,  0.,  0.],
           [ 0.,  0.,  0.,  0.]])
3 голосов
/ 16 декабря 2009

Если вы хотите нули в добавленных элементах, my_array.resize((1600, 1000)) должно работать. Обратите внимание, что это отличается от numpy.resize(my_array, (1600, 1000)), в котором предыдущие строки дублируются, что, вероятно, не то, что вы хотите.

В противном случае (например, если вы хотите избежать инициализации элементов на ноль, что может быть ненужным), вы действительно можете использовать hstack и vstack, чтобы добавить массив, содержащий новые элементы; numpy.concatenate() (см. Pydoc numpy.concatenate) тоже должно работать (насколько я понимаю, оно более общее).

В любом случае я бы предположил, что для расширения массива должен быть выделен новый блок памяти, и что все эти методы занимают примерно одно и то же время.

2 голосов
/ 16 декабря 2009

Неважно, что, вы будете застревать, перераспределяя кусок памяти, поэтому не имеет значения, используете ли вы arr.resize(), np.concatenate, hstack/vstack и т. Д. Обратите внимание, что если вы накапливаете много данных последовательно, списки Python обычно более эффективны.

0 голосов
/ 15 декабря 2009

Вы должны использовать reshape () и / или resize () в зависимости от ваших точных требований.

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

...