将numpy矩阵转换为1D numpy数组

时间:2015-02-19 11:23:41

标签: python numpy matrix scipy

我在一个维度上有一个csr_matrix的总和,它返回一维向量。默认情况下,这是numpy.matrix类型的形状(1,N)。但是,我想用numpy.array表示形状(N,)。以下作品:

>>> 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, 2, 2, 0])
    np.testing.assert_array_equal(r, e)

3 个答案:

答案 0 :(得分:2)

numpy.matrix类型已经是numpy.ndarray的子类,因此无需进行转换:

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

答案 1 :(得分:1)

我不确定这是否与您所做的完全相同,但它看起来有点简洁:

a.sum(axis=0).A1

http://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.A1.html#numpy.matrix.A1

答案 2 :(得分:0)

将n维数组转换为1维数组的简单numpy hack。

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

阵列([[1]    [2]])

a.reshape(len(a))
  

数组([1,2])