Matriks terbatas di Ruby

Mengapa kelas Matrix tidak memiliki metode untuk mengedit vektor dan komponennya? Sepertinya segala sesuatu di dalam matriks dapat dibaca tetapi tidak dapat ditulis. Apakah saya salah? Apakah ada kelas elegan seperti Matrix pihak ketiga yang memungkinkan saya menghapus baris dan dengan sengaja mengeditnya?

Tolong, beri tahu saya jika tidak ada kelas seperti itu – saya akan berhenti mencari.


person gmile    schedule 28.09.2009    source sumber
comment
Bisakah Anda menjelaskan apa yang Anda lakukan dengannya?   -  person khelll    schedule 28.09.2009
comment
Saya mencari baris dan kolom yang 'buruk' (yang seluruhnya terdiri dari nol), lalu saya ingin menghapusnya. Saya sudah memiliki kode untuk melakukan itu, tetapi ditulis sepenuhnya melalui Array. Namun demikian saya mencoba mencari solusi yang lebih tepat dan cantik.   -  person gmile    schedule 28.09.2009


Jawaban (1)


Perancang kelas Matrix pastilah penggemar struktur data yang tidak dapat diubah dan pemrograman fungsional. Ya kamu benar.

Apa pun masalahnya, ada solusi sederhana untuk apa yang Anda inginkan. Gunakan Matrix untuk apa yang bisa dilakukannya, lalu gunakan saja .to_a untuk mendapatkan array nyata.

>> Matrix.identity(2).to_a
=> [[1, 0], [0, 1]]

Lihat juga Numerical Ruby Narray. Anda juga dapat melakukan monkeypatch pada kelas untuk menambahkan lebih banyak perilaku. Jika Anda melakukan ini, harap tambal subkelas Matrix. (Ada proyek perpustakaan Ruby di luar sana yang menginginkan lebih banyak perilaku dari kelas required sehingga mereka langsung memodifikasinya, membuat file baru mereka agak beracun. Mereka bisa dengan mudah menambal subkelas atau kelas tunggal.)

Oh, dan khelll (:-) mungkin ingin saya mengatakan bahwa kemungkinan besar ada cara bagi Anda untuk melakukan apa Anda ingin dalam gaya fungsional. Artinya, dengan membuat objek baru, bukan dengan memodifikasi objek lama.

person DigitalRoss    schedule 28.09.2009
comment
+1 untuk menyebutkan kekekalan dan pemrograman fungsional, itu sebabnya saya bertanya apa sebenarnya yang ingin Anda lakukan, karena harus ada cara untuk itu tetapi tanpa mengubah matriks saat ini. - person khelll; 28.09.2009