2016-10-23 5 views
0

Я пытаюсь решить следующую проблемуПреобразовать панду в numpy.ndarray для sparse.hstack

import numpy as np 
import pandas as pd 
from scipy import sparse 

X1 = sparse.rand(10, 10000) 
df = pd.DataFrame({ 'a': range(10)}) 

На самом деле, я получаю X1 от TfidfVectorizer но отпустить код для краткости

I хотите применить sparse.hstack для использования обеих переменных в регрессии. конвертировать панды в numpy.ndarray ниже

X2 = df['a'].as_matrix() 
type(X2) 
numpy.ndarray 
X = sparse.hstack((X1,X2)) 
ValueError        Traceback (most recent call last) 
<ipython-input-38-9493e3833c5d> in <module>() 
----> 1 X = sparse.hstack((X1,X2)) 

C:\Program Files\Anaconda3\lib\site-packages\scipy\sparse\construct.py in hstack(blocks, format, dtype) 
    462 
    463  """ 
--> 464  return bmat([blocks], format=format, dtype=dtype) 
    465 
    466 

C:\Program Files\Anaconda3\lib\site-packages\scipy\sparse\construct.py in bmat(blocks, format, dtype) 
    579     elif brow_lengths[i] != A.shape[0]: 
    580      raise ValueError('blocks[%d,:] has incompatible ' 
--> 581          'row dimensions' % i) 
    582 
    583     if bcol_lengths[j] == 0: 

ValueError: blocks[0,:] has incompatible row dimensions 

Что случилось?

+0

из дока: 'Параметры: \t стро: последовательность ndarrays Все массивы должны иметь одинаковую форму вдоль всех, но второго axis.' так ваш массив не имеет ту же форму. вы можете проверить с помощью 'X1.shape()' и 'X2.shape()' –

+0

X1.shape (10, 10000) X2.shape (10,) – Edward

+0

Я думаю, для этого вам понадобится как минимум 1 строка. –

ответ

0

Я сделал, как показано ниже. Он работает

import numpy as np 
import pandas as pd 
from scipy import sparse 

X1 = sparse.rand(10, 10000) 
df = pd.DataFrame({ 'a': range(10)}) 

X2 = df['a'].reset_index() 
X2 = X2.iloc[:,[1]].values 

X = sparse.hstack((X1,X2)) 
+0

Или работает непосредственно с 'np.arange':' sparse.hstack ([X1, np.arange (10) [:, None]]) '. Идея состоит в создании матрицы столбцов. Посмотрите на 'sparse.bmat', чтобы узнать больше о том, что делает этот' hstack'. – hpaulj

0

Ваши массивы должны иметь тот же размер первого размера и должны содержать не менее 1 строки.

вы можете проверить, что на X1.shape() и X2.shape()

Смежные вопросы