Ndarray.T ne zaman güncellenir? [çiftleme]

Sep 24 2020

Numpy'de yöntem ndarrayile a'yı transpoze edebilirsiniz transpose(), ancak onun da bir niteliği vardır T.

A ndarraydeğiştirildiğinde, sadece transpose()yöntemin dönüş değeri değil , aynı zamanda öznitelik Tde otomatik olarak güncellenir.

ndarray.transpose()bir fonksiyondur, bu yüzden şaşılacak bir şey değildir. Ancak, Tbir işlev değil, yalnızca bir özniteliktir, bu nedenle erişilmeden önce güncellenmesi gerekir.

  1. Tüm Numpy işlevleri ve yöntemleri, Ther çağrıldıklarında özniteliği günceller mi?

  2. Öyleyse neden? Büyük matrisleri işlerken, aktarımla ilgili olmasa bile her işlemin hesaplama maliyetinin çok büyük olması muhtemeldir. Her seferinde özelliği transpose()yeniden yazmak yerine sadece gerektiğinde aramak daha mantıklı değil Tmi?

Bu basit bir örnek:

>>> import numpy as np
>>> x = np.array([[1, 2, 3],
...               [4, 5, 6]])
...
>>> x
array([[1, 2, 3],
       [4, 5, 6]])
>>> x.T
array([[1, 4],
       [2, 5],
       [3, 6]])

Elbette xeşzamanlı x.Tolarak işlem de değişir . Ne zaman x.Tgüncellendi? Yaptı mı x.__imul__()?

>>> x *= 100
>>> x
array([[100, 200, 300],
       [400, 500, 600]])
>>> x.T
array([[100, 400],
       [200, 500],
       [300, 600]])

Yanıtlar

1 kabanus Sep 23 2020 at 22:24

TAynıdır özelliği .transpose()değiştirilebilir biçim (ve adımlarla) sadece bir görünüşüdür. Gerçek içeriğin belleği aynıdır ( örneğin bunu doğrulamak için a id(x[0,0])ve kullanabilirsiniz id(x.T[0,0])), ancak nesne özellikleri numpyonu nasıl yorumlayacağınızı söyler . 2B bir dizi için, adımlar ve şekil orijinal dizinin tam tersidir. Adımlar hakkında daha fazla bilgi için dokümanlara bakın . Bu nedenle içerik değiştiğinde işler anında gerçekleşir - hafıza hücresi yeni sayıyı alır, ancak .Tdizinin yorumu değişmez.