2009-09-28 13 views
8

Dlaczego klasa Matrix nie ma metod edycji swoich wektorów i komponentów? Wygląda na to, że wszystko wewnątrz matrycy można odczytać, ale nie zapisać. Czy się mylę? Czy istnieje jakaś elegancka klasa trzecia, która pozwala mi usuwać wiersze i celowo je edytować?Ograniczone macierze w Rubim

Proszę, powiadom mnie, jeśli nie ma takiej klasy - przestanę szukać.

+0

Czy możesz wyjaśnić, co z tym robisz? – khelll

+0

Szukam "złych" wierszy i kolumn (które w całości składają się z zer), a następnie chciałbym je usunąć. Mam już kod do tego, ale napisany całkowicie przez Arrays. Mimo to staram się znaleźć bardziej precyzyjne i ładne rozwiązanie. – gmile

Odpowiedz

5

Projektant klasy Matrix musiał być fanem niezmiennych struktur danych i programowania funkcjonalnego. Tak, masz rację.

W każdym przypadku istnieje proste rozwiązanie tego, co chcesz. Użyj Matrix, aby dowiedzieć się, co może zrobić, po prostu użyj .to_a, aby uzyskać prawdziwą tablicę.

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

Zobacz także Numerical Ruby Narray. Możesz też monkeypatch the class, aby dodać więcej zachowań. Jeśli to zrobisz, załóż podklasę macierzy. (Istnieją projekty bibliotek w języku Ruby, które wymagają więcej zachowań z klas require d, więc bezpośrednio je modyfikują, co spowoduje, że ich nowe pliki będą nieco toksyczne. Mogłyby tak łatwo po prostu załatać podklasę lub klasę singleton.)

Aha, i khelll (:-) prawdopodobnie chciałbym, żebym powiedział, że jest całkiem możliwe, abyś zrobił to, co chcesz in a functional style. To znaczy, tworząc nowe obiekty, a nie modyfikując stare.

+0

Hmm, ok, może masz rację, – gmile

+0

+1 za wzmiankę o niezmienności i programowaniu funkcjonalnym, dlatego zapytałem, co chcesz zrobić dokładnie, ponieważ powinien istnieć sposób na to, ale bez modyfikowania obecnej macierzy. – khelll