Как 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 число различных разреженных матриц?. 1 ответ:
Используйте
sparseверсииvstack. Как правило, вы должны использовать разреженные функции и методы, а неnumpyс похожим именем.sparseматрицы не являются подклассамиnumpyndarray.Но, ваши 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