数组中的数字矩阵

我在用麻醉剂。我有一个包含1列和 N 行的矩阵,我想得到一个包含 N 个元素的数组。

例如,如果我有 M = matrix([[1], [2], [3], [4]]),我想得到 A = array([1,2,3,4])

为了达到这个目的,我使用了 A = np.array(M.T)[0]。有人知道一个更优雅的方法来得到同样的结果吗?

谢谢!

337919 次浏览

如果你想要一些更易读的东西,你可以这样做:

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

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

或者你可以试着避开一些临时工

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

我想这取决于你所说的优雅是什么意思,但这就是我要做的

你可以试试下面的方法:

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

如果你在乎速度,但如果你在乎记忆:

np.asarray(M).ravel()

首先是 Mv = numpy.asarray(M.T),它提供了一个4x1但是2D 的数组。

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

这将把矩阵转换成数组

A = np.ravel(M).T

Numpy 中的 ravel () 压扁函数是我将在这里尝试的两种技术。我想添加到由 Siraj泡泡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()更快 ,因为它是一个库级函数,不会复制数组的任何副本。然而,如果使用 numpy.ravel(),数组 A 中的任何更改都会传递到原始数组 M

numpy.flatten()慢于 numpy.ravel() ,但是如果你使用 numpy.flatten()来创建 A,那么 A 中的更改不会传递到原始数组 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

来晚了一点,希望这能帮到别人,

np.array(M.flat)