2016-03-19 42 views
0

我对二进制文本分类的任务的工作,我已经如下应用在我的数据向量化:错误合并两个二维数组时零维数组不能被串联

count_vect = CountVectorizer(tokenizer=tokens) 
X_train_counts = count_vect.fit_transform(docs_train.data) 
print X_train_counts.shape 
(150, 370) 

因为我想只需要从类中随机抽取“0”(一个在我的例子),并以一流的归类“1”,我做了以下内容:

x = X_train_counts 
y = docs_train.target 

a_x,a_y=x[y==0,:],y[y==0] 
b_x,b_y=x[y==1,:],y[y==1] 

inds=np.random.choice(range(a_x.shape[0]),50) 
random_x=a_x[inds,:] 
random_y=a_y[inds] 

x_merged=np.concatenate((random_x,b_x)) 
y_merged=np.concatenate((random_y,b_y)) 
X_train,y_train=shuffle(x_merged, y_merged, random_state=0) 

但我总是得到以下错误:

x_merged=np.concatenate((random_x,b_x)) 
ValueError: zero-dimensional arrays cannot be concatenated 

虽然当我打印的形状也gaves我:

print random_x.shape 
print b_x.shape 
(50, 370) 
(50, 370) 

任何想法如何解决呢?当然它会保留与标签链接的索引。

更新: 这是内容/类型每个阵列的打印时,下面的命令执行:

print random_x[:5,:].toarray() 
print b_x[:5,:].toarray() 
print (type(random_x)) 
print (type(b_x)) 

[[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
[4 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0]] 
[[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0]] 
<class 'scipy.sparse.csr.csr_matrix'> 
<class 'scipy.sparse.csr.csr_matrix'> 
+0

打印了一下两个数组的,所以我们可以看到什么在里面。请张贴确切的印刷品。我认为它不是关于形状,而是关于类型或尺寸。 – armatita

+0

我已经更新了每个数组的内容/类型的问题......谢谢 – Ophilia

+0

这是它与concatenate函数不兼容的类型。我已经给出了一个正式的答案来解决这个问题(嗯,我想)。 – armatita

回答

0

编辑:显然SciPy的有它自己的串连方式,包括hstackvstack其处理稀疏矩阵。

问题确实是这种类型。为了解决这个问题只需将您csr_matrix到一个数组,拼接,而且比再次将其转换为一个csr_matrix:

 import numpy as np 
    import scipy.sparse as m 
    a = np.zeros((50, 370)) 
    b = np.zeros((50, 370)) 

    am = m.csr_matrix(a).toarray() 
    bm = m.csr_matrix(b).toarray() 
    cm = m.csr_matrix(np.concatenate((am,bm))) 
    print(am.shape,bm.shape,cm.shape) 

结果是:

 (50, 370) (50, 370) (100, 370) 
+0

对不起,实际上它没有工作..它不给我在最后相同的形状...你的程序也许可以工作,因为a和b都是numpy数组..然而,如何添加下面的代码来连接这两个数组:'x_merged = sp.vstack((random_x,b_x),format ='csr')'...它给出了什么预期? ..我的意思是保留矩阵和标签阵列之间的联系'random_y&b_y' – Ophilia

+0

好吧,我已经更新了我的答案。我并不希望在转换中丢失信息。对于那个很抱歉。检查Scipy实现hstack和vstack的链接(在答案中)。 – armatita