2016-03-19 45 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