【发布时间】:2015-09-13 07:50:39
【问题描述】:
我想连接两个 csr_matrix,每个都有shape=(1,N)。
我知道我应该使用scipy.sparse.vstack:
from scipy.sparse import csr_matrix,vstack
c1 = csr_matrix([[1, 2]])
c2 = csr_matrix([[3, 4]])
print c1.shape,c2.shape
print vstack([c1, c2], format='csr')
#prints:
(1, 2) (1, 2)
(0, 0) 1
(0, 1) 2
(1, 0) 3
(1, 1) 4
但是,我的代码失败了:
from scipy.sparse import csr_matrix,vstack
import numpy as np
y_train = np.array([1, 0, 1, 0, 1, 0])
X_train = csr_matrix([[1, 1], [-1, 1], [1, 0], [-1, 0], [1, -1], [-1, -1]])
c0 = X_train[y_train == 0].mean(axis=0)
c1 = X_train[y_train == 1].mean(axis=0)
print c0.shape, c1.shape #prints (1L, 2L) (1L, 2L)
print c0,c1 #prints [[-1. 0.]] [[ 1. 0.]]
print vstack([c0,c1], format='csr')
最后一行引发异常 -
文件“C:\Anaconda\lib\site-packages\scipy\sparse\construct.py”,第 484 行,在 vstack
return bmat([[b] for b in blocks], format=format, dtype=dtype)文件“C:\Anaconda\lib\site-packages\scipy\sparse\construct.py”,第 533 行,在 bmat
raise ValueError('blocks must be 2-D') ValueError:块必须是二维的
我猜想使用 mean 与 out 有关。
有什么想法吗?
【问题讨论】:
-
prints [[-1. 0.]] [[ 1. 0.]]- 这不是打印稀疏矩阵的方式。那些很密集。 -
@hpaulj 是的,这有点奇怪......我终于注意到了
-
mean和sum由dot与密集数组(一个)相乘 - 结果是密集矩阵。即使一行中只有一个非零值,该行总和也将非零。