2dim array/matrix

hello,

I'm quite new to programming as well to ruby. I want to store data in a 2 dimensional array. How can I do this?

A more detailed describtion of what I want to do:
I have data from a digital elevation model. This is stored in a log txt file. I want to read it in and store it in an array or matrix. Because there are some error/gaps in the data I want to check for these values and calculate an average from the surrounding values. At the end all values should get written to an other txt file as x, y, z triples. The main problem for me to start is the 2dimensional storage. I know the needed size of the 2dim array/matrix (x-dim,y-dim). For getting the data in I was thinking of something like: dem[xi][yi]=value .

Kind regards

Wolfgang

Wolfgang wrote:

hello,

I'm quite new to programming as well to ruby. I want to store data in
a 2 dimensional array. How can I do this?

A more detailed describtion of what I want to do:
I have data from a digital elevation model. This is stored in a log
txt file. I want to read it in and store it in an array or matrix.
Because there are some error/gaps in the data I want to check for
these values and calculate an average from the surrounding values. At
the end all values should get written to an other txt file as x, y, z
triples. The main problem for me to start is the 2dimensional
storage. I know the needed size of the 2dim array/matrix
(x-dim,y-dim). For getting the data in I was thinking of something
like: dem[xi][yi]=value .

The easiest to achieve that is

matrix = Array.new(dim_x) { Array.new(dim_y) }

There are also some matrix classes on the RAA
http://raa.ruby-lang.org/search.rhtml?search=matrix

For storage you can use CSV implementations or cook your own:

File.open("matrix.csv", "w") do |io|
  matrix.each_with_index do |yvalues, xidx|
    yvalues.each_with_index do |val, yidx|
      io.print xidx,yidx,val,"\n"
    end
  end
end

etc.

HTH

Kind regards

    robert

Wolfgang wrote:

hello,

I'm quite new to programming as well to ruby. I want to store data in a 2 dimensional array. How can I do this?

A more detailed describtion of what I want to do:
I have data from a digital elevation model. This is stored in a log txt file. I want to read it in and store it in an array or matrix. Because there are some error/gaps in the data I want to check for these values and calculate an average from the surrounding values. At the end all values should get written to an other txt file as x, y, z triples. The main problem for me to start is the 2dimensional storage. I know the needed size of the 2dim array/matrix (x-dim,y-dim). For getting the data in I was thinking of something like: dem[xi][yi]=value .

Kind regards

Wolfgang

Ruby has a Matrix class in the standard library. Check out "matrix" in the http://www.ruby-doc.org/stdlib/\.

Thanks for the answers,

I think I will use for the beginning this solution:
  mx = Array.new(dim_x) { Array.new(dim_y) }

for the matrix class:
I don't understand how I can set in a matrix single values:
  require "matrix"
  m=Matrix[ [25, 93], [-1, 66] ]
  puts m.[](1,1)
this works but when I try:
  m.[](1,1)=123
  puts m
I only get an error.

Wolfgang

Try these:

puts m[1,1]
m[1,1] = 123
pits m[1,1]

brian

···

On 28/11/05, Wolfgang <wollez@gmx.net> wrote:

Thanks for the answers,

I think I will use for the beginning this solution:
        mx = Array.new(dim_x) { Array.new(dim_y) }

for the matrix class:
I don't understand how I can set in a matrix single values:
        require "matrix"
        m=Matrix[ [25, 93], [-1, 66] ]
        puts m.(1,1)
this works but when I try:
        m.(1,1)=123
        puts m
I only get an error.

Wolfgang

--
http://ruby.brian-schroeder.de/

Stringed instrument chords: http://chordlist.brian-schroeder.de/

Wolfgang wrote:

Thanks for the answers,

I think I will use for the beginning this solution:
mx = Array.new(dim_x) { Array.new(dim_y) }

for the matrix class:
I don't understand how I can set in a matrix single values:
require "matrix"
m=Matrix[ [25, 93], [-1, 66] ]
puts m.(1,1)
this works but when I try:
m.(1,1)=123
puts m
I only get an error.

You probably misread the documentation. Did you try

m[1,1]
m[1,1] = 123

?

Kind regards

    robert

m[1,1] = 123

Try it :slight_smile:

moulon% ruby -rmatrix -e 'm = Matrix[[25, 93], [-1, 66]]; m[1, 1] = 123'
-e:1: undefined method `=' for Matrix[[25, 93], [-1, 66]]:Matrix (NoMethodError)
moulon%

Guy Decoux

ts wrote:

m[1,1] = 123

Try it :slight_smile:

moulon% ruby -rmatrix -e 'm = Matrix[[25, 93], [-1, 66]]; m[1, 1] =
123' -e:1: undefined method `=' for Matrix[[25, 93], [-1,
66]]:Matrix (NoMethodError) moulon%

"cool" :slight_smile:

    robert