Saya ingin mendefinisikan array dua dimensi tanpa panjang yang diinisialisasi seperti ini:
Matrix = [][]
tapi itu tidak berhasil ...
Saya sudah mencoba kode di bawah ini, tetapi juga salah:
Matrix = [5][5]
Kesalahan:
Traceback ...
IndexError: list index out of range
Apa kesalahan saya?
python
matrix
syntax-error
Masoud Abasian
sumber
sumber
Jawaban:
Secara teknis Anda mencoba mengindeks array yang tidak diinisialisasi. Anda harus terlebih dahulu menginisialisasi daftar luar dengan daftar sebelum menambahkan item; Python menyebut ini "daftar pemahaman".
Anda sekarang dapat menambahkan item ke daftar:
Perhatikan bahwa matriksnya adalah "y" address major, dengan kata lain, "y index" muncul sebelum "x index".
Meskipun Anda dapat menamai mereka seperti yang Anda inginkan, saya melihatnya dengan cara ini untuk menghindari kebingungan yang dapat timbul dengan pengindeksan, jika Anda menggunakan "x" untuk daftar dalam dan luar, dan ingin Matriks non-persegi.
sumber
range
untuk membuat daftar internal secara langsung:[range(5) for x in range(5)]
[0] * w
bagian itu bagus, tetapi[[0] * w] * h]
akan menghasilkan perilaku yang tidak terduga. Cobamat = [[0] * 3] * 3; mat[0][1] = 10; print(mat == [[0, 10, 0], [0, 10, 0], [0, 10, 0]])
danmat = [[0] * 3 for i in range(3)]; mat[0][1] = 10; print(mat == [[0, 10, 0], [0, 0, 0], [0, 0, 0]])
.Jika Anda benar-benar menginginkan sebuah matriks, Anda mungkin lebih baik menggunakan
numpy
. Operasi matriks dinumpy
paling sering menggunakan tipe array dengan dua dimensi. Ada banyak cara untuk membuat array baru; salah satu yang paling berguna adalahzeros
fungsi, yang mengambil parameter bentuk dan mengembalikan array bentuk yang diberikan, dengan nilai yang diinisialisasi ke nol:Berikut adalah beberapa cara lain untuk membuat array dan matriks 2-d (dengan output dihapus untuk kekompakan):
numpy
menyediakanmatrix
jenis juga, tetapi tidak lagi direkomendasikan untuk penggunaan apa pun , dan dapat dihapus darinumpy
di masa depan.sumber
np.matrix
untuk mewakilinya. Cara yang tepat untuk merepresentasikan matriks dalam numpy adalah denganarray
.array
bukan matriks. Meskipun tidak selalu dianjurkan, ada alasan yang sah untuk menggunakanmatrix
hal-hal konteks.matrix
? Sejak@
operator diperkenalkan, sepertinya ada satu alasan lebih sedikit sejak tulisan ini ditulis.numpy
dokumen sekarang menunjukkan bahwa kelas mungkin sudah usang dan dihapus di masa depan, jadi saya sudah mengeluarkannya dari jawabannya.Berikut adalah notasi yang lebih singkat untuk menginisialisasi daftar daftar:
Sayangnya memperpendek ini menjadi sesuatu seperti
5*[5*[0]]
tidak benar-benar berfungsi karena Anda berakhir dengan 5 salinan dari daftar yang sama, jadi ketika Anda memodifikasi salah satu dari mereka semuanya berubah, misalnya:sumber
[0]*5
?[[0]*5 for _ in range(5)]
dengan penghitung loop anonim yang tidak Anda gunakan[0]*5
kerjanya. Sekarang saya mengerti mengapa[{0}]*8
itu adalah ide yang buruk juga.Jika Anda ingin membuat matriks kosong, sintaks yang benar adalah
Dan jika Anda ingin menghasilkan matriks ukuran 5 diisi dengan 0,
sumber
Jika yang Anda inginkan adalah wadah dua dimensi untuk menampung beberapa elemen, Anda bisa menggunakan kamus sebagai gantinya:
Maka Anda dapat melakukan:
Ini berhasil karena
1,2
merupakan tupel, dan Anda menggunakannya sebagai kunci untuk mengindeks kamus. Hasilnya mirip dengan matriks jarang bodoh.Seperti yang ditunjukkan oleh osa dan Josap Valls, Anda juga dapat menggunakan
Matrix = collections.defaultdict(lambda:0)
sehingga elemen yang hilang memiliki nilai default0
.Vatsal lebih lanjut menunjukkan bahwa metode ini mungkin tidak sangat efisien untuk matriks besar dan hanya boleh digunakan di bagian kode yang tidak terlalu penting untuk kinerja.
sumber
import collections; Matrix = collections.defaultdict(float)
, untuk mengganti nol untuk elemen yang tidak diinisialisasi.Dengan Python Anda akan membuat daftar daftar. Anda tidak harus mendeklarasikan dimensi sebelumnya, tetapi Anda bisa. Sebagai contoh:
Sekarang matriks [0] [0] == 2 dan matriks [1] [0] == 3. Anda juga dapat menggunakan sintaksis pemahaman daftar. Contoh ini menggunakannya dua kali lipat untuk membangun "daftar dua dimensi":
sumber
extend
juga akan membantu dalam kasus pertama: Jika Anda mulai denganm = [[]]
, maka Anda dapat menambahkan ke daftar dalam (memperpanjang baris) denganm[0].extend([1,2])
, dan menambahkan ke daftar luar (menambahkan baris baru) denganm.append([3,4])
, operasi-operasi itu akan meninggalkan Anda[[1, 2], [3, 4]]
.Jawaban yang diterima baik dan benar, tetapi butuh beberapa saat untuk memahami bahwa saya juga bisa menggunakannya untuk membuat array yang benar-benar kosong.
hasil dalam
sumber
Anda harus membuat daftar daftar, dan cara terbaik adalah dengan menggunakan pemahaman bersarang:
Pada
[5][5]
contoh Anda, Anda membuat daftar dengan bilangan bulat "5" di dalamnya, dan mencoba mengakses item ke-5, dan itu secara alami meningkatkan IndexError karena tidak ada item ke-5:sumber
Mengapa kode yang begitu panjang, itu juga di
Python
Anda bertanya?Dulu ketika saya merasa tidak nyaman dengan Python, saya melihat jawaban baris tunggal untuk menulis matriks 2D dan berkata pada diri sendiri saya tidak akan menggunakan matriks 2-D dalam Python lagi. (Baris tunggal itu sangat menakutkan dan tidak memberi saya informasi tentang apa yang Python lakukan. Juga perhatikan bahwa saya tidak mengetahui steno ini.)
Bagaimanapun, inilah kode untuk pemula yang berasal dari latar belakang C, CPP dan Java
Catatan untuk Python Lovers and Experts: Tolong jangan turun memilih hanya karena saya menulis kode rinci.
sumber
Menulis ulang agar mudah dibaca:
sumber
Menggunakan:
* 5 untuk dimensi pertama berfungsi karena pada level ini data tidak dapat diubah.
sumber
matrix = [[0]*cols for _ in range(rows)]
Untuk mendeklarasikan matriks nol (satu):
misalnya
atau numpy.ones ((x, y)) mis
Bahkan tiga dimensi dimungkinkan. ( http://www.astro.ufl.edu/~warner/prog/python.html lihat -> array multi dimensi)
sumber
Ini adalah bagaimana saya biasanya membuat array 2D dengan python.
Saya menemukan sintaks ini mudah diingat dibandingkan dengan menggunakan dua untuk loop dalam pemahaman daftar.
sumber
Saya menggunakan skrip Python pertama saya, dan saya sedikit bingung dengan contoh matriks kuadrat jadi saya harap contoh di bawah ini akan membantu Anda menghemat waktu:
maka
sumber
Menggunakan NumPy Anda dapat menginisialisasi matriks kosong seperti ini:
Dan kemudian menambahkan data seperti ini:
sumber
Saya membaca dalam file yang dipisahkan koma seperti ini:
Daftar "data" kemudian daftar daftar dengan data indeks [baris] [col]
sumber
Jika Anda ingin dapat menganggapnya sebagai array 2D daripada dipaksa untuk berpikir dalam hal daftar daftar (jauh lebih alami menurut saya), Anda dapat melakukan hal berikut:
Hasilnya adalah daftar (bukan array NumPy), dan Anda dapat menimpa posisi individu dengan angka, string, apa pun.
sumber
numpy.matrix
setara dengannumpy.zeros
tanpa nol tanpa daftar?Untuk itulah kamus dibuat!
Anda dapat menentukan kunci dan nilai dengan dua cara:
atau
Hasil:
sumber
Menggunakan:
Saya pikir NumPy adalah cara untuk pergi. Di atas adalah yang umum jika Anda tidak ingin menggunakan NumPy.
sumber
dengan menggunakan daftar:
dengan menggunakan dict: Anda juga dapat menyimpan info ini di tabel hash untuk pencarian cepat seperti
matrix ['1'] akan memberi Anda hasil dalam O (1) waktu
* nb : Anda harus berurusan dengan tabrakan di tabel hash
sumber
Jika Anda tidak memiliki informasi ukuran sebelum memulai, buat dua daftar satu dimensi.
Simpan seluruh baris dalam daftar 1. Setelah selesai, tambahkan daftar 1 ke daftar 2:
Keluaran:
sumber
Hati-hati dengan ungkapan singkat ini, lihat penjelasan lengkap di jawaban @ FJ
sumber
Matrix[0], Matrix[1], ..., Matrix[4]
semua menunjuk ke array yang sama, jadi setelah ituMatrix[0][0] = 3
, Anda harapkanMatrix[0][0] == Matrix[1][0] == ... == Matrix[4][0] == 3
.Akan lebih cepat dari:
sumber
[[0]*(L) for i in range(W)]
harus[[0]*(L) for _ in range(W)]
karenai
tidak digunakan di mana punAnda dapat membuat daftar dua dimensi kosong dengan menyarangkan dua atau lebih bracing persegi atau braket ketiga (
[]
, dipisahkan dengan koma) dengan bracing persegi, seperti di bawah ini:Sekarang misalkan Anda ingin menambahkan 1 untuk
Matrix[0][0]
kemudian Anda ketik:Sekarang, ketik Matrix dan tekan Enter. Outputnya adalah:
sumber
Coba ini:
sumber
Jika Anda membutuhkan matriks dengan angka yang telah ditentukan, Anda dapat menggunakan kode berikut:
sumber
Berikut ini cuplikan kode untuk membuat matriks dalam python:
Tolong sarankan jika saya melewatkan sesuatu.
sumber