将 numpy 矩阵转换为一维 numpy 数组
Convert numpy matrix into 1D numpy array
我有一个 csr_matrix
一维的和,returns 一个一维向量。默认情况下,类型 numpy.matrix
具有形状 (1, N)。但是,我想用形状为 (N,) 的 numpy.array
来表示它。以下作品:
>>> 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)
我不确定这是否与您所做的本质上相同,但它看起来稍微整洁一些:
a.sum(axis=0).A1
http://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.A1.html#numpy.matrix.A1
类型 numpy.matrix
已经是 numpy.ndarray
的子类,因此不需要进行转换:
>>> np.ravel(a.sum(axis=0))
array([1, 2, 2, 0])
将 n 维数组转换为一维数组的简单 numpy hack。
import numpy as np
a = np.array([[1],[2]])
array([[1]
[2]])
a.reshape(len(a))
array([1, 2])
我有一个 csr_matrix
一维的和,returns 一个一维向量。默认情况下,类型 numpy.matrix
具有形状 (1, N)。但是,我想用形状为 (N,) 的 numpy.array
来表示它。以下作品:
>>> 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)
我不确定这是否与您所做的本质上相同,但它看起来稍微整洁一些:
a.sum(axis=0).A1
http://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.A1.html#numpy.matrix.A1
类型 numpy.matrix
已经是 numpy.ndarray
的子类,因此不需要进行转换:
>>> np.ravel(a.sum(axis=0))
array([1, 2, 2, 0])
将 n 维数组转换为一维数组的简单 numpy hack。
import numpy as np
a = np.array([[1],[2]])
array([[1] [2]])
a.reshape(len(a))
array([1, 2])