Я думаю, вы найдете atleast_1d
поучительным. Сначала его код:
def atleast_1d(*arys):
res = []
for ary in arys:
ary = asanyarray(ary)
if ary.ndim == 0:
result = ary.reshape(1)
else:
result = ary
res.append(result)
if len(res) == 1:
return res[0]
else:
return res
С вашими образцами:
In [11]: a = 1
...: b = np.array([1,2,3])
...: c = np.array([1,2,3])
Возвращает список массивов, по одному для каждого из входов:
In [12]: np.atleast_1d(a,b,c)
Out[12]: [array([1]), array([1, 2, 3]), array([1, 2, 3])]
распаковка затем можно использовать для переназначения переменных:
In [13]: a,b,c = np.atleast_1d(a,b,c)
In [14]: a
Out[14]: array([1])
Поскольку он использует asanyarray
, массивы b
и c
не копируются (даже представления).
It не совсем то, что вы хотите, массив ones
того же размера, что и b
или c
, но его можно адаптировать для этого.