我正在使用numpy。 我有一个包含1列和N行的矩阵,我想从中获取一个具有N个元素的数组。
例如,如果我有M = matrix([[1], [2], [3], [4]])
,我想得到A = array([1,2,3,4])
。
为了实现这一点,我使用A = np.array(M.T)[0]
。 有没有人知道更简洁优雅的方法来获得相同的结果?
谢谢!
如果你想让内容更易读,可以这样做:
A = np.squeeze(np.asarray(M))
等价地,你也可以这样做:A = np.asarray(M).reshape(-1)
,但这种方式不太易读。
numpy.matrix
是一个有争议的问题,但是Numpy开发人员非常赞同您的观点,即拥有两者对于Python来说是不符合惯例且令人讨厌的。然而,“野外”中使用matrix
的大量旧且未维护的代码使得完全删除它变得困难。 - Joe Kingtonsklearn
)至关重要。实际上,在 scipy
中有不同的 sparse matrix
类型,可以通过行或列进行高效访问。我想这可能是将矩阵和数组的概念合并的一个问题。话虽如此,我想知道是否也可以引入 sparse array
类型,并且是否有任何计划来实现它。有什么线索吗? - pmsresult = M.A1
https://numpy.org/doc/stable/reference/generated/numpy.matrix.A1.html
matrix.A1
1-d base array
A, = np.array(M.T)
取决于你所说的“优雅”是什么意思,但那就是我会做的事情。
你可以尝试以下变体:
result=np.array(M).flatten()
np.array(M).ravel()
np.asarray(M).ravel()
或者您可以尝试使用以下方法避免一些临时问题:
A = M.view(np.ndarray)
A.shape = -1
Mv = numpy.asarray(M.T)
将给你一个4x1但是2D数组。A = Mv[0,:]
,这会给你所需的结果。你可以将它们组合在一起,如numpy.asarray(M.T)[0,:]
。A = np.ravel(M).T
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,)
%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
有点晚了,希望这能帮到某个人,
np.array(M.flat)