web-dev-qa-db-ja.com

ナンピー行列から配列

私はnumpyを使用しています。 1列とN行の行列があり、N要素の配列を取得したい。

たとえば、M = matrix([[1], [2], [3], [4]])がある場合、A = array([1,2,3,4])を取得します。

それを実現するには、A = np.array(M.T)[0]を使用します。誰も同じ結果を得るためのよりエレガントな方法を知っていますか?

ありがとう!

134
yassin

もう少し読みやすくしたい場合は、次のようにします。

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

同様に、A = np.asarray(M).reshape(-1)を実行することもできますが、それは少し読みにくいです。

173
Joe Kington
109
hpaulj
A, = np.array(M.T)

エレガンスの意味に依存しますが、それは私がすることです

13
mvu

次のバリエーションを試すことができます。

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

スピードを重視する場合;しかし、メモリを気にする場合:

np.asarray(M).ravel()
6
Kevad

または、いくつかの臨時雇用者を回避しようとすることができます

A = M.view(np.ndarray)
A.shape = -1
6
Pierre GM

まず、Mv = numpy.asarray(M.T)。4x1であるが2D配列を提供します。

次に、A = Mv[0,:]を実行して、必要なものを提供します。 numpy.asarray(M.T)[0,:]としてそれらをまとめることができます。

2
oracleyue

これは行列を配列に変換します

A = np.ravel(M).T
2
Siraj S.

ravel()flatten() numpyの関数は、ここで試してみる2つの手法です。 JoeSirajbubble 、および 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
0