2014-10-22 1 views
0

지금은 을 사용 중이며 MATLAB 배경에서 왔습니다. matlab (mat (ii, jj) = 일부 셀 객체)와 같이 요소를 색인화하는 행렬/수학적 스타일을 수행 할 수 있도록 객체 행렬을 만들고 싶습니다. 비슷한 행렬 형식의 객체가 Ruby에 표시되지 않습니다.배열/목록과 같은 객체의 '행렬'을 만드는 방법은 무엇입니까?

  • 내가 보는 것은 매트릭스의 구조를 제공하기 위해 다차원 배열을 만드는 것이 가장 좋습니다. 맞습니까?
  • Ruby에서 구조와 같은 매트릭스를 가장 잘 만드는 방법은 무엇입니까?
  • 행과 열 크기가 초기화 지점에서 정의되며 이후에 변경 될 수 있습니까?

현재 I 특별히이 매트릭스 형 구조의 소자에서 다른 어레이 객체를 삽입 할 수행 (ar=Array.new(3){Array.new(3)})

irb(main):001:0> ar=Array.new(3){Array.new(3)} 
=> [[nil, nil, nil], [nil, nil, nil], [nil, nil, nil]] 
irb(main):002:0> ar.size 
=> 3 
irb(main):004:0> ar[0].size 
=> 3 
irb(main):005:0> ar[0][0].size 
NoMethodError: undefined method `size' for nil:NilClass 
from (irb):5 
from :0 
irb(main):006:0> ar[0][0]=[rand,rand,rand] 
=> [0.327998120619301, 0.233951721107845, 0.0593579127810733] 
irb(main):007:0> ar[1][0]=[rand,rand,rand] 
=> [0.698779972364559, 0.290838119763321, 0.41685249594095] 
irb(main):008:0> ar[2][0]=[rand,rand,rand] 

를 상기^매트릭스^이러한 방식으로 충전하는 것을 계속한다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

하지만 같은 쉽게 작업을 수행 할 수 없습니다 문제가 여전히 존재 :

irb(main):026:0> ar[0][0] 
=> [0.327998120619301, 0.233951721107845, 0.0593579127810733] 
irb(main):027:0> ar[0][1] 
=> [0.360152144966612, 0.611276758393565, 0.0717397147786591] 
irb(main):028:0> ar[0][0]-ar[0][1] 
=> [0.327998120619301, 0.233951721107845, 0.0593579127810733] 

내가 볼 수있는 유일한 방법은 각각의 색인에서이다는 :

irb(main):032:0> ar[0][0][0]-ar[0][0][1] 
=> 0.094046399511456 
+0

이렇게하면 IRB 프롬프트없이 쉽게 읽을 수 있습니다. –

답변

0

Matrix class 있습니다 :

require 'matrix' 

m = Matrix[[0,1,0],[1,0,0],[0,1,1]] 
m.det   #=> -1 
m.diagonal? #=> false 
m.trace  #=> 1 

다음과 같이 임의의 행렬을 쉽게 만들 수 있습니다.

m = Matrix.build(3,3) { rand } 

참고 : 행렬은 2 차원 행렬만을 제공 할 수 있습니다. 더 많은 치수가 필요하면 직접 만들어야합니다.

+0

하지만 Matrix 클래스는 변경할 수 없습니다. – Vass

+0

그러나 필요하다면'm.send (: [] =, x, y, value)'로 업데이트 할 수 있습니다. 그러나 권장하지는 않습니다. – BroiSatse