125

たとえば、配列があり、同じ要素を持つnumpy配列がA必要な場合。numpyB

次の (以下を参照) メソッドの違いは何ですか? 追加メモリが割り当てられるのはいつで、割り当てられないのはいつですか?

  1. B = A
  2. B[:] = A(と同じB[:]=A[:]?)
  3. numpy.copy(B, A)
4

3 に答える 3

153

3 つのバージョンはすべて異なることを行います。

  1. B = A

    Bこれにより、すでに名前が付けられている既存のオブジェクトに新しい名前がバインドされAます。その後、それらは同じオブジェクトを参照するため、一方をその場で変更すると、もう一方にも変更が反映されます。

  2. B[:] = A(と同じB[:]=A[:]?)

    Aこれにより、値が既存の配列にコピーされますB。これが機能するには、2 つの配列が同じ形状である必要があります。B[:] = A[:]は同じことB = A[:]を行います (ただし、1 に近いことを行います)。

  3. numpy.copy(B, A)

    これは正当な構文ではありません。あなたはおそらく意味しB = numpy.copy(A)た。これは 2 とほぼ同じですが、配列を再利用するのではなく、新しい配列を作成しますB。以前の値への他の参照がなかった場合B、最終結果は 2 と同じになりますが、コピー中に一時的により多くのメモリを使用します。

    それともnumpy.copyto(B, A)、合法で 2 に相当する を意味していたのでしょうか?

于 2013-10-30T07:59:38.120 に答える
33
  1. B=A参照を作成します
  2. B[:]=Aコピーを作成します
  3. numpy.copy(B,A)コピーを作成します

最後の 2 つは追加のメモリが必要です。

ディープコピーを作成するには、使用する必要がありますB = copy.deepcopy(A)

于 2013-10-30T07:52:53.483 に答える
16

これは私にとって唯一の有効な答えです:

B=numpy.array(A)
于 2016-09-14T16:18:31.423 に答える