Как hstack несколько разреженных матриц (feature Matrix)?



У меня есть 3 разреженные матрицы:



In [39]:

mat1


Out[39]:
(1, 878049)
<1x878049 sparse matrix of type '<type 'numpy.int64'>'
with 878048 stored elements in Compressed Sparse Row format>

In [37]:

mat2


Out[37]:
(1, 878049)
<1x878049 sparse matrix of type '<type 'numpy.int64'>'
with 744315 stored elements in Compressed Sparse Row format>

In [35]:

mat3



Out[35]:
(1, 878049)
<1x878049 sparse matrix of type '<type 'numpy.int64'>'
with 788618 stored elements in Compressed Sparse Row format>


Из документации я прочитал, что можно hstack, vstack, и concatenate их такой тип матриц. Поэтому я попытался hstack их:



import numpy as np

matrix1 = np.hstack([[address_feature, dayweek_feature]]).T
matrix2 = np.vstack([[matrix1, pddis_feature]]).T


X = matrix2


Однако размеры не совпадают:



In [41]:

X_combined_features.shape

Out[41]:

(2, 1)


Обратите внимание, что я укладываю такие матрицы, так как я хотел бы использовать их с алгоритмом классификации scikit-learn. Следовательно, Как я должен hstack число различных разреженных матриц?.
708   1  

1 ответ:

Используйте sparse версии vstack. Как правило, вы должны использовать разреженные функции и методы, а не numpy с похожим именем. sparse матрицы не являются подклассами numpy ndarray.

Но, ваши 3 три матрицы не выглядят разреженными. Они 1x878049. Один имеет 878048 ненулевых элементов - это означает только один элемент 0.

Таким образом, вы можете также превратить их в плотные массивы (с .toarray() или .A) и использовать np.hstack или np.vstack.

np.hstack([address_feature.A, dayweek_feature.A])

И не используйте двойные скобки. Все функции конкатенации принимают простой список или кортеж массивов. И этот список может иметь более 2 массивов

In [296]: A=sparse.csr_matrix([0,1,2,0,0,1])

In [297]: B=sparse.csr_matrix([0,0,0,1,0,1])

In [298]: C=sparse.csr_matrix([1,0,0,0,1,0])

In [299]: sparse.vstack([A,B,C])
Out[299]: 
<3x6 sparse matrix of type '<class 'numpy.int32'>'
    with 7 stored elements in Compressed Sparse Row format>

In [300]: sparse.vstack([A,B,C]).A
Out[300]: 
array([[0, 1, 2, 0, 0, 1],
       [0, 0, 0, 1, 0, 1],
       [1, 0, 0, 0, 1, 0]], dtype=int32)

In [301]: sparse.hstack([A,B,C]).A
Out[301]: array([[0, 1, 2, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0]], dtype=int32)

In [302]: np.vstack([A.A,B.A,C.A])
Out[302]: 
array([[0, 1, 2, 0, 0, 1],
       [0, 0, 0, 1, 0, 1],
       [1, 0, 0, 0, 1, 0]], dtype=int32)

Comments

    Ничего не найдено.