2017-05-22 21 views
2

私が減らしたい3D行列があるとします。私は最初の次元を約10個の要素に減らしたいと思っています(10であれば最善ですが、必要ではありません)。私はそのためにこのコードを使用:ndarrayの最初の次元を減らす - 最初と最後の要素を保持する

import numpy 
m = numpy.random.rand(37,2,100) 
new_m = m[0:-1:int(m.shape[0]/10)] 
# new_m.shape = (12, 2, 100) 

マイ問題は次の通りである:私は私の元の行列と同じように、この最初の次元の最初と最後の要素をしたいです。あなたはnew_m[-1]m[-1]に等しくないと見ることができるように

new_m[0,:,:2], new_m[-1,:,:2] 
#[[ 0.06081972 0.91343839] [ 0.89614534 0.33846807]] 
#[[ 0.37289341 0.62491196] [ 0.30603305 0.1442681 ]] 
m[0,:,:2], m[-1,:,:2] 
#[[ 0.06081972 0.91343839] [ 0.89614534 0.33846807]] 
#[[ 0.28143018 0.10626664] [ 0.30334235 0.29616713]] 

、と私は彼らがなりたい: しかし、私の現在のコードで、この条件は、最後の要素のために保有していません。

マイ試行/アイデア

  • 私はこのエラーを得たが、私はnew_mm[-1]を追加しようとした:

    AttributeError: 'numpy.ndarray' object has no attribute 'append'

  • 私もnew_m[-1] = m[-1]をやって思ったが、私は間にスペースを希望ステップは比例する(すなわち、ステップがよく分離される)。

ご意見、ご提案はありますか?

答えて

2

numpyを使用しているので、派手なインデックス作成を利用することができます。 linespaceも使用します。これは、エンドポイントを含む範囲内に均等に間隔を置いたポイントを生成します。引数は、rangeに渡すものに似ています。

indexes = np.linspace(0, len(m) - 1, 10, dtype=int) 
new_m = m[indexes] 
+1

ありがとうございました!私は 'linspace'が引数として' dtype'を取るこ​​とができないことを知りませんでした。 v1.9に登場して以来、私の古いnumpyバージョン(v1.8.2)を更新する必要があります。 – Nuageux

関連する問題