Kapan ndarray.T diupdate? [duplikat]
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.
Apakah semua fungsi dan metode Numpy memperbarui
Tatribut setiap kali dipanggil?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 ulangTatribut 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
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.