У меня есть сумма csr_matrix
над одним измерением, которое возвращает 1-мерный вектор. Это по умолчанию тип numpy.matrix
с формой (1, N). Однако я хочу представить это с помощью numpy.array
с формой (N,). Следующие работы:Преобразование матрицы numpy в массив 1D numpy
>>> import numpy as np; import scipy.sparse as sparse
>>> a = sparse.csr_matrix([[0,1,0,0],[1,0,0,0],[0,1,2,0]])
>>> a
Out[15]:
<3x4 sparse matrix of type '<class 'numpy.int64'>'
with 4 stored elements in Compressed Sparse Row format>
>>> a.todense()
Out[16]:
matrix([[0, 1, 0, 0],
[1, 0, 0, 0],
[0, 1, 2, 0]], dtype=int64)
>>> a.sum(axis=0)
Out[17]: matrix([[1, 2, 2, 0]], dtype=int64)
>>> np.array(a.sum(axis=0)).ravel()
Out[18]: array([1, 2, 2, 0], dtype=int64)
Однако этот последний шаг кажется немного излишним для преобразования из Numpy матрицы в Numpy массив. Есть ли функция, которая у меня отсутствует, которая может сделать это для меня? Он должен пройти следующий модульный тест.
def test_conversion(self):
a = sparse.csr_matrix([[0,1,0,0],[1,0,0,0],[0,1,2,0]])
r = a.sum(axis=0)
e = np.array([1, 1, 2, 0])
np.testing.assert_array_equal(r, e)
Обратите внимание, что в то время как ' 'сама по себе является разреженной матрицей, сумма представляет собой' np.matrix'. Ярлыки типа '.A1', которые работают с более поздними версиями, не работают на редкой. – hpaulj