1

私はruby1.9.2-p290とRubyMineを使用しています。そして、私はMatrixを使おうとします('matrix'が必要です)。だから、私はいくつかの質問があります。

  • マトリックスの値を変更するにはどうすればよいですか?

例えば:

require 'matrix'
matrix =  Matrix[[1, -2, 3], [3, 4, -5], [2, 4, 1]]
matrix[0, 0] = 5
p matrix

次を与える:

in `<top (required)>': private method `[]=' called for Matrix[[1, -2, 3], [3, 4, -5], [2, 4, 1]]:Matrix (NoMethodError)
from -e:1:in `load'
from -e:1:in `<main>'
  • RubyMine IDEでコード補完によって行列のメソッドを表示することはできますか?
  • マトリックスにはどのライブラリを使用する必要がありますか?マトリックス?Mathn?他に何かありますか?
4

2 に答える 2

2

Ad 1)ドキュメントには、これ[]=はパブリックインスタンスメソッドであると記載されていますが、1.9.2の現実はそれに一致していないようです。

matrix.private_methods.grep(/\[\]/) #=> [:[]=]

これには2つの方法があります。send1つ目は、バイパスに使用することprivateです。

matrix.send(:[]=, 0, 0, 5) #=> 5

2つ目は、配列を通過することです。

m = *matrix
m[0][0] = 5
matrix = Matrix[*m]

本当に必要な場合は、メソッドの可視性を変更できます。

matrix.class.class_eval { public :[]= }

これらのいずれも推奨しないことに注意してください。クラスの実装方法は、作成者が行列を不変オブジェクトと見なすという強力なヒントです。

Ad 2)残念ながら、RubyMineはわかりませんが、Matrixクラスのドキュメントはここにあります。

Ad 3)私はまだRubyで行列を広範囲に使用していませんが、必要なものについてはMatrixクラスは十分でした。

于 2011-08-28T12:12:32.010 に答える
0

マイケルの答えを補足したかっただけです:

1)Matrixライブラリは、複素数の実数部を設定できないのと同じように、行列が不変になるように設計されています。

私はライブラリの管理者です(ただし、元の作成者ではありません)。ただし、それらが変更可能であれば、おそらく役立つと思います。Ruby 1.9.3に変更するには遅すぎますが、変更可能にした場合の影響を確認したいと思います。

NArray3)別の可能性はライブラリをチェックすることです。

于 2011-09-10T18:16:17.503 に答える