Разреженный матричный hstack, получающий ошибку относительно подписки - PullRequest
0 голосов
/ 08 марта 2019

Кто-нибудь, пожалуйста, объясните, почему это не работает?

from scipy.sparse import coo_matrix, hstack
row = np.array([0,3,1,0])
col = np.array([0,3,1,2])
data = np.array([4,5,7,9])

temp = coo_matrix((data, (row, col)))
temp_stack = coo_matrix([0, 11,22,33], ([0, 1,2,3], [0, 0,0,0]))
temp_res = hstack(temp, temp_stack)

Я получаю ошибку, что coo_matrix не является подпиской, но я не понимаю, почему, похоже, я объединяю матрицысовместимый размер.

1 Ответ

1 голос
/ 08 марта 2019

Первое замечание: первый аргумент 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...