Дважды вы создаете np.array([])
.Обратите внимание на его форму:
In [140]: x = np.array([])
In [141]: x.shape
Out[141]: (0,)
Он работает в np.append
- потому что без параметра оси append
это просто concatenate((x, y), axis=0)
, например, добавление формы (0,) и (3,), чтобы создать (3,) форму:
In [142]: np.append(x, np.arange(3))
Out[142]: array([0., 1., 2.])
Но vstack
не работает.Он вводит свои входные данные в двумерные массивы и объединяет их на первой оси:
In [143]: np.vstack((x, np.arange(3)))
ValueError: all the input array dimensions except for the concatenation axis must match exactly
Таким образом, мы объединяем (0,) и (3,) на новой первой оси, например (1,0)и (1,3) на первой оси.0 и 3 не совпадают, поэтому ошибка.
vstack
работает при соединении (3,) с (3,) и a (1,3) и a (4,3).Обратите внимание на общее «последнее» измерение.
Основная проблема заключается в том, что вы пытаетесь эмулировать добавление в список без полного понимания измерений или того, что делает concatenate
.Каждый раз создается новый массив.np.append
не является клоном list.append
!.
Что вы должны сделать, это начать со списка []
(или двух), добавить к нему новые значения, составив список списков.Затем np.array(alist)
, чтобы превратить это в массив (при условии, конечно, что все подсписки совпадают по размеру).
Я не обратил внимания на вашу запись или как вы читаете строки, поэтому не могусказать, имеет ли это смысл или нет.