2dim array/matrix


#1

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


#2

Wolfgang wrote:

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

#3

Wolfgang wrote:

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/.


#4

On 28/11/05, Wolfgang removed_email_address@domain.invalid wrote:

this works but when I try:
m.=123
puts m
I only get an error.

Wolfgang

Try these:

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

brian


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

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


#5

Wolfgang wrote:

this works but when I try:
m.=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

#6

“R” == Robert K. removed_email_address@domain.invalid writes:

R> 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


#7

ts wrote:

“R” == Robert K. removed_email_address@domain.invalid writes:

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

#8

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.
this works but when I try:
m.=123
puts m
I only get an error.

Wolfgang