Kapan ndarray.T diupdate? [duplikat]

Sep 24 2020

Di Numpy, Anda dapat mengubah ndarrayurutan a dengan transpose()metode tersebut, tetapi ia juga memiliki atribut T.

Ketika a ndarraydiubah, tidak hanya nilai kembalian transpose()metode, tetapi juga atribut Tsecara otomatis diperbarui pada saat yang sama.

ndarray.transpose()adalah sebuah fungsi, jadi tidak perlu heran. Namun, Tbukanlah sebuah fungsi, melainkan atribut belaka, sehingga harus diupdate sebelum diakses.

  1. Apakah semua fungsi dan metode Numpy memperbarui Tatribut setiap kali dipanggil?

  2. Jika ya, mengapa? Kemungkinan besar, saat menangani matriks yang sangat besar, biaya komputasi setiap operasi akan sangat besar meskipun tidak relevan dengan transposisi. Bukankah lebih masuk akal untuk memanggil transpose()hanya jika diperlukan daripada menulis ulang Tatribut setiap saat?

Ini adalah contoh sederhana:

>>> 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]])

Tentu saja, pengoperasian xsecara bersamaan juga berubah x.T. Kapan x.Tdiperbarui? Apakah x.__imul__()melakukannya?

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

Jawaban

1 kabanus Sep 23 2020 at 22:24

The Tproperti yang sama .transpose()hanya tampilan dengan bentuk (dan langkah) berubah. Memori konten sebenarnya adalah sama (Anda dapat menggunakan a id(x[0,0])dan id(x.T[0,0])misalnya untuk memverifikasi ini), tetapi properti objek memberi tahu numpycara menafsirkannya. Untuk larik 2D, langkah dan bentuknya hanyalah kebalikan dari larik aslinya. Untuk membaca lebih lanjut tentang langkah, lihat dokumen . Inilah sebabnya mengapa hal-hal menjadi segera ketika konten berubah - sel memori mendapatkan nomor baru, tetapi interpretasi .Tarray tidak berubah.