私は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)
を実行することもできますが、それは少し読みにくいです。
result = M.A1
https://docs.scipy.org/doc/numpy-1.14.0/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
ravel() と flatten() numpyの関数は、ここで試してみる2つの手法です。 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