2016-09-07 2 views
1

Я инициализируется этот пустой 2d np.arrayNumpy Массив Форма выпуска

inputs = np.empty((300, 2), int)

И я пытаюсь добавить в 2d строку к нему в качестве такого

inputs = np.append(inputs, np.array([1,2]), axis=0)

Но Im получая

ValueError: all the input arrays must have same number of dimensions

И Numpy думает, что это 2 строка 0 мерный объект (транспонирование из 2d)

np.array([1, 2]).shape

(2,)

Где я пошло не так?

+0

Обратите внимание на форму вашего вставленной массива, когда вы делаете: 'np.array ([[1, 2]]). shape' –

+0

'(2,)' - 1-й массив. Это ничего не переносит. – hpaulj

ответ

0

Numpy требует двойных скобок, чтобы объявить массив буквальным, так

np.array([1,2])

должна быть

np.array([[1,2]])

+1

Оба создают массивы, один имеет форму '(2,)', другие '(1,2)', 1d и 2d. Я не знаю, что вы подразумеваете под «массивным литералом». – hpaulj

+0

@hpaulj: Я бы рискнул, что исправление пытается сказать _ ", чтобы буквально перевести матричный массив matlab literal' [1, 2] 'в numpy, вам [иногда] нужен дополнительный набор скобок" _ – Eric

3

Чтобы добавить строку в массив (300,2) формы, вам нужно (1,2) массив формы. Обратите внимание на сопоставление второго измерения.

np.array([[1,2]]) работ. Так np.array([1,2])[None, :] и np.atleast_2d([1,2]).

Я рекомендую использовать np.concatenate. Это заставляет вас думать более тщательно об измерениях.

Вы действительно хотите начать работу с np.empty? Посмотрите на его значения. Они случайны и, вероятно, большие.

@Divakar предлагает np.row_stack. Это немного озадачило меня, пока я не проверил и не обнаружил, что это просто другое имя для np.vstack. Эта функция передает все входы через np.atleast_2d перед выполнением np.concatenate. Таким образом, в конечном счете то же решение - превратить (2,) массив в (1,2)

+0

отличный материал, спасибо все. – redress

0

Если вы собираетесь добавить, что в последней строке в inputs, вы можете просто использовать np.row_stack -

np.row_stack((inputs,np.array([1,2]))) 

Пожалуйста, обратите внимание, это np.array([1,2]) является 1D массив.

Вы даже можете передать его версию 2D строки для того же результата -

np.row_stack((inputs,np.array([[1,2]]))) 
+0

Никогда не слышал о 'row_stack' раньше! 'vstack' да. :) – hpaulj

+0

@hpaulj Да, похоже, его даже не документировали :) – Divakar