Есть ли способ сделать следующее без предложения 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
Проблема с добавлением (изсправочник 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()
), он (и другие) указал, что коднеэффективно.В ответе ниже я объединил их предложения и заменил мой оригинальный код.Это должно быть намного эффективнее сейчас.Спасибо.