请有人解释为什么这行不通吗?
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
无法下标,但是我不明白为什么,看来我正在连接兼容维的矩阵。
答案 0 :(得分:1)
首先请注意,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