baptiste Auguiwrote:
> Hi,
> 
> Being used to deal with Octave / Matlab, I'm a bit confused by Ruby 
> structures (arrays, hashes, etc). I have this data file "data.dat" with 
> 3 columns:
> 
> 
>> 1.240000    9.990000e-01    1.290000e-06
>> 1.550000    1.000000e+00    2.920000e-06
>> 2.066000    1.002000e+00    8.360000e-06
>> 2.480000    1.001000e+00    1.520000e-05
>> 2.755000    1.001000e+00    2.210000e-05
>> 3.099000    1.003000e+00    3.570000e-05
>> 3.444000    1.003000e+00    3.240000e-05
>> 3.542000    1.003000e+00    1.720000e-05
>> 4.133000    1.001000e+00    1.430000e-05
>> 4.959000    1.001000e+00    2.400000e-05
>> 6.199000    1.001000e+00    4.720000e-05
>> 8.265000    9.990000e-01    1.210000e-04
> 
> I would like to think of the columns as arrays "a", "b", "c", execute a 
> loop along their indices, pick the values i want, and do something with 
> them. What would be a sensible data structure for this?
> I can read this datafile line by line using IO:readlines("data.dat"), 
> but I cannot find a way to refer to one column in the array of strings 
> generated.
In native Ruby, the only way to do that would be:

arr = [[0,1],[2,3],[4,5]]
arr.map{|a| a[0]}
# => [0,2,4]

If you can install rb-gsl (and it's probably a good idea if you're 
expecting to do matlab/octavey things), then there's the 
GSL::Matrix#column method which (as I understand it, not being a heavy 
GSL user) actually gives a reference into the original matrix, rather 
than copying to a new one as Array#map does.

-- 
Alex