回答:
もう少し読みやすくしたい場合は、これを行うことができます:
A = np.squeeze(np.asarray(M))
同様に、次のこともできます:A = np.asarray(M).reshape(-1)
、しかしそれは少し読みにくいです。
numpy.matrix
はやや論争の多い問題ですが、numpyの開発者は、両方を使用することは多くの理由で不便で迷惑であることに同意します。ただし、使用されている「野生の」古い、メンテナンスされていないコードの量により、matrix
完全に削除することは困難です。
sklearn
。実際、にはさまざまなsparse matrix
タイプがありscipy
、行または列を介して効率的にアクセスできます。これは、行列と配列の概念をマージするための問題かもしれないと思います。とはいえ、導入できるかどうかは疑問ですsparse array
型ています。手がかりはありますか?
result = M.A1
https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.matrix.A1.html
matrix.A1
1-d base array
np.array(M).ravel()
スピードが気になるなら しかし、あなたが記憶を気にかけるなら:
np.asarray(M).ravel()
ラヴェル()と平ら() numpyのの機能は、私はここにしようとするだろうという二つの技術です。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()
これは、配列のコピーを作成しないライブラリレベルの関数であるため、より高速です。ただし、を使用している場合、配列Aの変更は元の配列Mに引き継がれますnumpy.ravel()
。
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