2016-05-07 23 views
2

既存の配列から新しい配列を作成し、既存の配列の値から始めて終わりにしたいのですか?例えば既存のNumpy配列からナンディ配列を作成するには

は、x、

arr1=arr[x:y] 

>終了インデックス

例 - - >インデックス

Yを起動します。

arr = np.array([1,2,3,4,5,6,7,8,9,10]) 

def split(array): 
    # I am only interested in 4 thru 8 in original array 
    return new_array 

>>>new_array 
>>> array([4,5,6,7,8]) 
+2

'arr [3:8]'または 'arr [3:8] .copy()'はコピーではなくビューであることを望みます。 – Jaime

答えて

1

はちょうどこの操作を行います:

>>> import numpy as np 
>>> arr = np.array([1,2,3,4,5,6,7,8,9,10]) 
>>> arr 
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
>>> arr1=arr[3:8] 
>>> arr1 
array([4, 5, 6, 7, 8]) 

上記のケースでは、Pythonでの代入文を使用してオブジェクトをコピーせず、ターゲットとオブジェクトの間にバインディングを作成します。

シャローコピーを行うには、.copy()を使用します。

(可能な限り)新しい複合オブジェクトを作成し、次に浅いコピーは、元に見つかったオブジェクトにその中に参照を挿入します。

すなわち

>>> arr1=arr[3:8].copy() 
>>> arr1 
array([4, 5, 6, 7, 8]) 

あなたは深いコピーを行うためにdeepcopy()を使用することができます。

新しい複合オブジェクトを作成し、次に、再帰的に、原稿に検出されたオブジェクトのそれにコピーを挿入ディープコピー。

すなわち

>>> arr2 = deepcopy(arr[3:8]) 
>>> lst2 
array([4, 5, 6, 7, 8]) 

さらに参照:

copy — Shallow and deep copy operations

Shallow and Deep Copy

+1

'deepcopy'はリストと関係しますが、' numpy'配列とは関係ありません。 – hpaulj

+0

はい、リストのリストは特別です。ちょうど参照のためにそれをすべて入れてください。 'copy()'は問題の解決策です。 –

+3

技術的には、 'arr1'は新しい配列(独自の' shape'と 'id')を持っていますが、基底のデータバッファを' arr'と共有しています。しかし、 'arr1 = arr [[3,4,5]]'は完全なコピーになります。長期的には、 'numpy'' view'と 'copy'の違いを理解することが重要です。 – hpaulj

0

あなたは、配列をスライスしてコピーする必要があります。 @AniMenonで述べたスライスは、まずコロケーションインデックスで実現できます。

次に、組み込みの.copy()を使用するか、コピーをインポートしてcopy.copy()を使用するかを選択できます。

どちらの方法でも、これは後で予期しない相互接続を避けるための重要なステップです。

関連する問題