时间:2010-07-26 17:25:23

标签: python arrays matrix numpy

10 个答案:

答案 0 :(得分:173)

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

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

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

答案 1 :(得分:109)

答案 2 :(得分:13)

A, = np.array(M.T)

取决于你所说的优雅你的意思,但这就是我要做的事情

答案 3 :(得分:9)

您可以尝试以下变体:

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

答案 4 :(得分:6)

或者你可以尝试用

来避免一些临时措施
A = M.view(np.ndarray)
A.shape = -1

答案 5 :(得分:6)

np.array(M).ravel()

如果你关心速度;但如果你关心记忆:

np.asarray(M).ravel()

答案 6 :(得分:2)

首先,Mv = numpy.asarray(M.T),它为您提供4x1但2D数组​​。

然后,执行A = Mv[0,:],它会为您提供所需内容。您可以将它们组合在一起,如numpy.asarray(M.T)[0,:]

答案 7 :(得分:2)

这会将矩阵转换为数组

A = np.ravel(M).T

答案 8 :(得分:0)

numpy的

ravel()flatten()函数是我将在此处尝试的两种技术。我想补充一下JoeSirajbubbleKevad的帖子。

规则:

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

答案 9 :(得分:-1)

来晚了,希望对大家有所帮助,

np.array(M.flat)