2010-07-26 89 views
104

我正在使用numpy。我有一个有1列和N行的矩阵,我想用N个元素得到一个数组。Numpy matrix to array

例如,如果我有M = matrix([[1], [2], [3], [4]]),我想获得A = array([1,2,3,4])。我想用A = np.array(M.T)[0]来实现它。有没有人知道更优雅的方式来获得相同的结果?

谢谢!

+0

Ivnerse问题:[将2D阵列numpy的为2D numpy的矩阵(http://stackoverflow.com/questions/17443620/convert-a-2d -numpy-array-to-a-2d-numpy-matrix) – 2013-07-03 08:56:54

回答

125

如果您想一些更可读的,你可以这样做:等价

A = np.squeeze(np.asarray(M)) 

,你也可以这样做:A = np.asarray(M).reshape(-1),但是这是一个有点不太容易阅读。

+4

对我而言,小小的争吵......为什么numpy将数组和矩阵作为单独的实体。它是如此unpythonic恕我直言。感谢这个提示@Joe。 – Naijaba 2015-02-13 06:37:47

+5

@Naijaba - 值得的是,矩阵类有效(但不是正式)贬值。它主要是为了历史目的。删除'numpy.matrix'是一个有争议的问题,但是numpy的开发者非常同意你的观点,即由于一系列的原因,两者都是不合理的和烦人的。但是,使用“矩阵”的旧版“无法维护”的代码很难完全删除它。 – 2015-02-13 14:03:15

+1

更何况,真正的矩阵乘法仅在Numpy 1.10中添加了数组,并且基本上仍处于测试阶段。这意味着很多人(包括我自己)仍然需要使用矩阵而不是阵列来完成我们想要完成的任务。 https://docs.scipy.org/doc/numpy/reference/generated/numpy.matmul.html – 2016-12-31 02:35:45

5

或者你可以尽量避免与

A = M.view(np.ndarray) 
A.shape = -1 
10
A, = np.array(M.T) 

一些临时工取决于你的优雅我想的意思,但多数民众赞成我会做

4

你可以尝试以下的变体:

result=np.array(M).flatten() 
5
np.array(M).ravel() 

如果你关心速度;但是,如果你关心内存:

np.asarray(M).ravel() 
1

首先,Mv = numpy.asarray(M.T),它给你一个4X1但二维数组。

然后,执行A = Mv[0,:],它给你你想要的。你可以把它们放在一起,如numpy.asarray(M.T)[0,:]

0

这将基质转换成阵列

A = np.ravel(M).T