есть ли способ сделать следующее без предложения if?
Я читаю набор файлов netcdf с помощью pupynere и хочу построить массив с помощью numpy добавить. Иногда входные данные являются многомерными (см. переменную «a» ниже), иногда одномерными («b»), но количество элементов в первом измерении всегда одинаково («9» в примере ниже). .
> import numpy as np
> a = np.arange(27).reshape(3,9)
> b = np.arange(9)
> a.shape
(3, 9)
> b.shape
(9,)
это работает как ожидалось:
> np.append(a,a, axis=0)
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8],
[ 9, 10, 11, 12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23, 24, 25, 26],
[ 0, 1, 2, 3, 4, 5, 6, 7, 8],
[ 9, 10, 11, 12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23, 24, 25, 26]])
но, добавление b работает не так элегантно:
> np.append(a,b, axis=0)
ValueError: arrays must have same number of dimensions
Проблема с append (из руководства по numpy)
«Когда указана ось, значения должны иметь правильную форму».
Мне пришлось бы сначала выполнить приведение в чтобы получить правильный результат.
> np.append(a,b.reshape(1,9), axis=0)
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8],
[ 9, 10, 11, 12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23, 24, 25, 26],
[ 0, 1, 2, 3, 4, 5, 6, 7, 8]])
Итак, в моем цикле чтения файла я в настоящее время использую предложение if, подобное этому:
for i in [a, b]:
if np.size(i.shape) == 2:
result = np.append(result, i, axis=0)
else:
result = np.append(result, i.reshape(1,9), axis=0)
Есть ли способ добавить «a» и «b» без оператора if?
РЕДАКТИРОВАТЬ: Хотя @Sven отлично ответил на исходный вопрос (используя np.atleast_2d ()
), он (и другие) указал, что код неэффективен. В ответе ниже я объединил их предложения и заменил свой исходный код. Теперь это должно быть намного эффективнее. Спасибо.