2015-02-19 2 views
1

У меня есть сумма 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) 
+0

Обратите внимание, что в то время как ' 'сама по себе является разреженной матрицей, сумма представляет собой' np.matrix'. Ярлыки типа '.A1', которые работают с более поздними версиями, не работают на редкой. – hpaulj

ответ

2

Тип numpy.matrix уже подкласс numpy.ndarray, поэтому преобразование не должно происходить:

>>> np.ravel(a.sum(axis=0)) 
array([1, 2, 2, 0]) 
0

Простой numpy-хак для преобразования n-мерного массива в 1-й массив.

import numpy as np 
a = np.array([[1],[2]]) 

массив ([[1] [2]])

a.reshape(len(a)) 

массив ([1, 2])

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