アルゴリズムで使用される多数の多次元NP配列(2Dおよび3D)があります。これには多数の反復があり、各反復中に、計算を実行して同じサイズの一時的な配列に保存することによって配列が再計算されます。 1回の反復の終了時に、一時配列の内容が実際のデータ配列にコピーされます。NumPyのスワップアレイデータ
例:AとBがちょうど入れ替えることができるとき
global A, B # ndarrays
A_temp = numpy.zeros(A.shape)
B_temp = numpy.zeros(B.shape)
for i in xrange(num_iters):
# Calculate new values from A and B storing in A_temp and B_temp...
# Then copy values from temps to A and B
A[:] = A_temp
B[:] = B_temp
これは正常に動作しますが、しかし、すべてのそれらの値をコピーするには少し無駄なようです。以下は、配列を交換します:
A, A_temp = A_temp, A
B, B_temp = B_temp, B
しかし、これは変更されません他のスコープ内の配列への他の参照が存在することができます。
NumPyは、numpy.swap(A, A_temp)
のように、2つの配列の内部データポインタをスワップするための内部的な方法があるようです。 A
を指すすべての変数は、変更されたデータを指しています。あなたが道(私は、問題がどこか別の場所である疑いがある)としては良い動作するはずにもかかわらず
「これは変更されない他のスコープのアレイへの他の参照」の例を挙げることができますか? – dmytro
たとえば、計算ステップでは、フィールドが引数として渡される関数で呼び出される複数のスレッドを持つことができます。複数のスレッドをインスタンス化するオーバーヘッドを減らすために、それらも循環します。 – coderforlife
正しく思い出した場合、sharedctypes配列などの特定の機能を使用していない限り、コピーなしでスレッド/プロセス間でデータを渡すことはできません。しかし、私は間違っているかもしれません... – dmytro