2016-04-07 19 views
0

私はnp.arraysで作業しています。最後のN値を削除するより効率的な方法fom np.array

corr=corr[:-n] 

しかし、私はにnp.delete使用を考えていた:私は、nはまた、1

n=5 
corr=np.full(10,10) 

通常、私は配列のスライスで、このアプローチを使用することができ、最後のn個の要素を、削除しようとしていますパフォーマンスの増加:

np.delete(corr,range(-n,0)) 

をしかし、それは動作しません、任意のより良い解決策は、配列のスライスとの比較がありますか? (n = 0の場合にも対処できる方法です)

+0

'view'または' copy'をしますか? – hpaulj

+0

np.deleteは新しい配列を割り当てます。これはスライスよりも遅くなる可能性があります(正のインデックス、つまり範囲(5,10)など)を与える必要があります yeah ... np.deleteはスライスよりも遅い。 – CookieOfFortune

+0

'delete'はインプレースで動作しません。新しい配列を返します。 – hpaulj

答えて

3

アレイはshapedtypeような属性を持つオブジェクト、及びデータバッファです。 A[:-5]のようなビューは、独自のshapeなどを持つ別の配列ですが、共有データバッファーを使用しています。同じデータを見ていますが、スライスだけが見えます。

A[:-5].copy()は同じであるように見えますが、Aから選択した要素のコピーを持つ独自のデータバッファを持ちます。

Aのデータバッファのサイズを変更する方法はありません。

np.deleteは、独自のデータバッファを持つ新しい配列を返します。形状や削除パターンに応じて様々な方法を使います。すべての場合、それはコピーであり、スライスよりも遅い。

2

corr[0:corr.size-n]を使用してください。これはビューだけなので、より高速です。 np.deleteは残りの要素のコピーです。

In [9]: %timeit corr[0:corr.size-5] 
1000000 loops, best of 3: 1.45 µs per loop 

In [10]: %timeit np.delete(corr,range(corr.size-5,corr.size)) 
10000 loops, best of 3: 145 µs per loop 
関連する問題