2016-09-12 10 views
1

互換性のあるタイプと形状のndarray aとbがあります。私は今、bのデータがaのデータを参照することを望みます。つまり、配列bオブジェクト自体を変更したり、新しいオブジェクトを作成したりする必要はありません。 (bは実際にはndarrayから派生したクラスのオブジェクトであり、構築後にデータ参照を設定したいとします)。次の例では、b.set_data_referenceをどのように実行しますか?NumPyでは、配列bのデータを配列aのデータを参照するように設定するにはどうすればよいですか?

import numpy as np 
a = np.array([1,2,3]) 
b = np.empty_like(a) 
b.set_data_reference(a) 

この結果、b [0] == 1となり、1つの配列の設定操作が他の配列に影響します。例えば。私は配列bの作成を制御する場合には、私は

のようにそれを作成していることができることを承知しています:私たちが設定されている場合は、[1] 22は、その後、我々は22

はNBそのB [1] ==を検査することができます=

b = np.array(a, copy=True) 

これはそうではありません。あなたが続く

import numpy as np 

a = np.array([1,2,3]) 
b = a 

として直接=を使用できるようにPythonで

+1

あなたのケースに適さない可能性のある独自の例を作成しなければならない人を節約するために、aおよびb配列の小さなサンプルを提供できますか? –

答えて

1

に従うようbaを参照していることを確認することができます。 bの作成を制御した場合、aのデータバッファを使用するように作成できますが、bを作成した後は、aのバッファを交換することはできません。通常

+0

ありがとう!それは非常に貴重な情報でした。 –

0

すべての変数がポインタであるあなたは、numpyのは、この操作をサポートしていない

assert a[1] == b[1] 
a[1] = 4 
assert a[1] == b[1] 
+0

識別子がaの下にあるオブジェクトを指すようにします。これは、bのデータがaのデータを参照するのと同じではありません。 bがndarrayから継承する別のクラスの与えられたオブジェクトであると想像してください。 –

0

機能は常に彼らは既存のバッファが使用されているかどうか、発信者が制御できる方法

def func(a, b, c, out=None): 
    if out is None: 
     out = numpy.array(x, y) 
    # ... 
    return out 

ようなインターフェイスを実装して、独自のバッファを作成することになっていません。問題へ

0

一つの解決策はここに Numpy set array memory

質問に言葉で表現された今、numpyの連中は、この解決策を見つけることがさらに困難になりますので、完全にデータオブジェクトを削除するように見えます。

numpyの1.12.0では、リリースノート:ndarrayオブジェクトのデータの

割り当てが、GH-7083に>指摘したように 'データ' 属性は、本質的に危険な操作で割り当て

属性。このような機能は将来削除される予定です。

したがって、これは今後の解決策ではない可能性があり、他の方法を検討する必要があります。

+0

提供されたリンクには、問題の解決策が含まれています。 https://stackoverflow.com/users/4687348/felixsfdで提案されている適切な情報が含まれるように文章を編集しました。 – maxz

関連する問題