たとえば、配列があり、同じ要素を持つnumpy
配列がA
必要な場合。numpy
B
次の (以下を参照) メソッドの違いは何ですか? 追加メモリが割り当てられるのはいつで、割り当てられないのはいつですか?
B = A
B[:] = A
(と同じB[:]=A[:]
?)numpy.copy(B, A)
3 つのバージョンはすべて異なることを行います。
B = A
B
これにより、すでに名前が付けられている既存のオブジェクトに新しい名前がバインドされA
ます。その後、それらは同じオブジェクトを参照するため、一方をその場で変更すると、もう一方にも変更が反映されます。
B[:] = A
(と同じB[:]=A[:]
?)
A
これにより、値が既存の配列にコピーされますB
。これが機能するには、2 つの配列が同じ形状である必要があります。B[:] = A[:]
は同じことB = A[:]
を行います (ただし、1 に近いことを行います)。
numpy.copy(B, A)
これは正当な構文ではありません。あなたはおそらく意味しB = numpy.copy(A)
た。これは 2 とほぼ同じですが、配列を再利用するのではなく、新しい配列を作成しますB
。以前の値への他の参照がなかった場合B
、最終結果は 2 と同じになりますが、コピー中に一時的により多くのメモリを使用します。
それともnumpy.copyto(B, A)
、合法で 2 に相当する を意味していたのでしょうか?
B=A
参照を作成しますB[:]=A
コピーを作成しますnumpy.copy(B,A)
コピーを作成します最後の 2 つは追加のメモリが必要です。
ディープコピーを作成するには、使用する必要がありますB = copy.deepcopy(A)
これは私にとって唯一の有効な答えです:
B=numpy.array(A)