У меня есть две разреженные матрицы (созданные из sklearn
HashVectorizer
, из двух наборов функций - каждый набор соответствует признаку). Я хочу объединить их, чтобы потом использовать их для кластеризации. Но я столкнулся с проблемой с размерами, так как две матрицы не имеют одинаковых размеров строк.Укладка двух разреженных матриц с различными размерами
Вот пример:
Xa = [-0.57735027 -0.57735027 0.57735027 -0.57735027 -0.57735027 0.57735027
0.5 0.5 -0.5 0.5 0.5 -0.5 0.5
0.5 -0.5 0.5 -0.5 0.5 0.5 -0.5
0.5 0.5 ]
Xb = [-0.57735027 -0.57735027 0.57735027 -0.57735027 0.57735027 0.57735027
-0.5 0.5 0.5 0.5 -0.5 -0.5 0.5
-0.5 -0.5 -0.5 0.5 0.5 ]
Оба Xa
и Xb
имеют тип <class 'scipy.sparse.csr.csr_matrix'>
. Формы Xa.shape = (6, 1048576) Xb.shape = (5, 1048576)
. Ошибки я получаю (что теперь я знаю, почему это происходит):
X = hstack((Xa, Xb))
File "/usr/local/lib/python2.7/site-packages/scipy/sparse/construct.py", line 464, in hstack
return bmat([blocks], format=format, dtype=dtype)
File "/usr/local/lib/python2.7/site-packages/scipy/sparse/construct.py", line 581, in bmat
'row dimensions' % i)
ValueError: blocks[0,:] has incompatible row dimensions
Есть ли способ, чтобы стек разреженных матриц, несмотря на нерегулярные размеры? Может быть, с некоторым дополнением?
Я смотрел на эти посты:
Вы можете разместить форму ваших матриц Xa и Xb? –
обновленный пост с фигурами. – user1717931
Я думаю, что нашел обход: конкатенацию с использованием ухабистого и преобразование результата в csr_matrix. Изучая больше, чтобы узнать, все ли в порядке. Xc = np.concatenate ([Xa.data, Xb.data]), а затем выполните: sm = sparse.csr_matrix (Xc). – user1717931