Ответ 1
Короткий ответ: вы не можете. NumPy не поддерживает отрезные массивы изначально.
Длинный ответ:
>>> a = ones((3,))
>>> b = ones((2,))
>>> c = array([a, b])
>>> c
array([[ 1. 1. 1.], [ 1. 1.]], dtype=object)
дает массив, который может или не может вести себя так, как вы ожидаете. Например. он не поддерживает базовые методы, такие как sum
или reshape
, и вы должны относиться к этому так же, как к обычным спискам Python [a, b]
(перебирать его для выполнения операций вместо использования векторизованных идиом).
Существует несколько возможных обходных решений; проще всего принудить a
и b
к общей длине, возможно, используя маскированные массивы или NaN, чтобы сигнализировать о том, что некоторые индексы недействительны в некоторые строки. Например. здесь b
в виде маскированного массива:
>>> ma.array(np.resize(b, a.shape[0]), mask=[False, False, True])
masked_array(data = [1.0 1.0 --],
mask = [False False True],
fill_value = 1e+20)
Это может быть сложено с помощью a
следующим образом:
>>> ma.vstack([a, ma.array(np.resize(b, a.shape[0]), mask=[False, False, True])])
masked_array(data =
[[1.0 1.0 1.0]
[1.0 1.0 --]],
mask =
[[False False False]
[False False True]],
fill_value = 1e+20)
(Для некоторых целей scipy.sparse
также может быть интересным.)