答案 0 :(得分:173)
如果你想要一些更具可读性的东西,你可以这样做:
A = np.squeeze(np.asarray(M))
同样地,你也可以这样做:A = np.asarray(M).reshape(-1)
,但这不太容易阅读。
答案 1 :(得分:109)
result = M.A1
https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.matrix.A1.html
matrix.A1
1-d base array
答案 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)
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()
更快,因为它是库级别的函数,不会复制任何数组。但是,如果使用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)