Первое замечание: первый аргумент hstack
, как ожидается, будет кортежем, содержащим массивы, которые должны быть сложены, поэтому вы должны вызывать его с hstack((temp, temp_stack))
.
Далее temp
имеет форму (4, 4)
, а temp_stack
имеет форму (1, 4)
. Эти формы не могут быть hstack
ред. Какую форму ожидает результат? Если вы пытаетесь создать результат, имеющий форму (5, 4)
, используйте vstack
:
In [28]: result = vstack((temp, temp_stack))
In [29]: result.A
Out[29]:
array([[ 4, 0, 9, 0],
[ 0, 7, 0, 0],
[ 0, 0, 0, 0],
[ 0, 0, 0, 5],
[ 0, 11, 22, 33]], dtype=int64)
Если вы хотели, чтобы temp_stack
имел форму (4, 1)
, то исправьте его создание, добавив дополнительный уровень скобок в вызове coo_matrix
:
In [38]: temp_stack = coo_matrix(([0, 11, 22, 33], ([0, 1, 2, 3], [0, 0, 0, 0])))
In [39]: temp_stack.shape
Out[39]: (4, 1)
In [40]: result = hstack((temp, temp_stack))
In [41]: result.A
Out[41]:
array([[ 4, 0, 9, 0, 0],
[ 0, 7, 0, 0, 11],
[ 0, 0, 0, 0, 22],
[ 0, 0, 0, 5, 33]], dtype=int64)
Кстати, я думаю, что это ошибка SciPy, что этот вызов
temp_stack = coo_matrix([0, 11,22,33], ([0, 1,2,3], [0, 0,0,0]))
не вызывает ошибку. Этот вызов эквивалентен
temp_stack = coo_matrix(arg1=[0, 11,22,33], shape=([0, 1,2,3], [0, 0,0,0]))
и это значение shape
явно недействительно. Этот вызов на coo_matrix
должен поднять ValueError
. Я создал проблему для этого на сайте SciPy github: https://github.com/scipy/scipy/issues/9919