Answers:
如果您想让内容更具可读性,可以执行以下操作:
A = np.squeeze(np.asarray(M))
同样,您也可以执行以下操作:A = np.asarray(M).reshape(-1)
,但是它不太容易阅读。
numpy.matrix
是一个有争议的问题,但是Numpy开发人员非常同意您的观点,因为很多原因,两者都令人讨厌。但是,由于使用了大量旧的,未经维护的代码,matrix
因此很难完全删除它。
sklearn
)的基础。实际上,中有不同的sparse matrix
类型scipy
,它们允许通过行或列进行有效访问。我想这可能是合并矩阵和数组概念的问题。就是说,我想知道是否也可以引入一种sparse array
类型,以及是否有任何计划这样做。有什么线索吗?
result = M.A1
https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.matrix.A1.html
matrix.A1
1-d base array
np.array(M).ravel()
如果您在乎速度;但是,如果您关心内存:
np.asarray(M).ravel()
numpy的ravel()和flatten()函数是我将在此处尝试的两种技术。我想补充一下Joe,Siraj,bubble和Kevad的帖子。
拉威尔:
A = M.ravel()
print A, A.shape
>>> [1 2 3 4] (4,)
展平:
M = np.array([[1], [2], [3], [4]])
A = M.flatten()
print A, A.shape
>>> [1 2 3 4] (4,)
numpy.ravel()
更快,因为它是库级别的函数,不会复制任何数组。但是,如果使用,则数组A中的任何更改都会将其自身带到原始数组M中numpy.ravel()
。
numpy.flatten()
比慢numpy.ravel()
。但是,如果你使用的是numpy.flatten()
创建一个,然后改变了一个将不会延续到原来的列M。
numpy.squeeze()
并且M.reshape(-1)
比numpy.flatten()
和慢numpy.ravel()
。
%timeit M.ravel()
>>> 1000000 loops, best of 3: 309 ns per loop
%timeit M.flatten()
>>> 1000000 loops, best of 3: 650 ns per loop
%timeit M.reshape(-1)
>>> 1000000 loops, best of 3: 755 ns per loop
%timeit np.squeeze(M)
>>> 1000000 loops, best of 3: 886 ns per loop