Velocity Reviews > Perl > 2D array of real numbers

# 2D array of real numbers

jeanluc
Guest
Posts: n/a

 08-29-2007
I want to create a 2D array whose values initially contains 0.0

>From "http://www.xav.com/perl/lib/Pod/perllol.html"

I see that the following code will set up a 3x2 2D array:

@2D_array = (
[0.0, 0.0, 0.0],
[0.0, 0.0, 0.0],
);

The above works fine but unfortunately I might have to make some large
arrays of arbitrary size. Doing it manually like above is not
possible.

I want to use the variables

\$no_rows = 50;
\$no_columns = 63;

To define a 50x63 2D arbitrary array filled with 0.0.

Anybody know how to do this?

Thanks!

Peter Makholm
Guest
Posts: n/a

 08-29-2007
jeanluc <(E-Mail Removed)> writes:

> I want to use the variables
>
> \$no_rows = 50;
> \$no_columns = 63;
>
> To define a 50x63 2D arbitrary array filled with 0.0.
>
> Anybody know how to do this

The x operator would be usefull for this.

perl -MData:umper -le '\$a = [ (0.0) x 10 ]; print Dumper \$a'

//Makholm

Mirco Wahab
Guest
Posts: n/a

 08-29-2007
jeanluc wrote:
> I want to create a 2D array whose values initially contains 0.0
> To define a 50x63 2D arbitrary array filled with 0.0.
>
> Anybody know how to do this?

...
use constant NROW => 50; # set number of rows
use constant NCOL => 63; # set number of columns

my @Arr2D =
map [ ( 0.0 ) x NCOL ], # generate single ROW of NCOL COLUMNS
1 .. NROW; # NROW ROWS

print map "@\$_\n", @Arr2D;
...

Regards

M.

jeanluc
Guest
Posts: n/a

 08-29-2007
Works great!

Thanks!!

John W. Krahn
Guest
Posts: n/a

 08-30-2007
Petr Vileta wrote:
> jeanluc wrote:
>> I want to create a 2D array whose values initially contains 0.0
>>
>>> From "http://www.xav.com/perl/lib/Pod/perllol.html"

>>
>> I see that the following code will set up a 3x2 2D array:
>>
>> @2D_array = (
>> [0.0, 0.0, 0.0],
>> [0.0, 0.0, 0.0],
>> );
>>
>> The above works fine but unfortunately I might have to make some large
>> arrays of arbitrary size. Doing it manually like above is not
>> possible.
>>
>> I want to use the variables
>>
>> \$no_rows = 50;
>> \$no_columns = 63;

>
> my \$no_rows = 50;
> my \$no_columns = 63;
> my @row=(0.0)x\$no_columns;
> my @array=([@row])x\$no_rows;

You are making \$no_rows copies of the *same* anonymous array so any change to
\$array[0] will also show up in \$array[1] and \$array[2] and \$array[3] and etc.

> But you must address element as \$array[row]->[col] instead of
> \$array[row][col].

Because you said so? I don't think so.

John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order. -- Larry Wall

Guest
Posts: n/a

 08-30-2007
Petr Vileta <(E-Mail Removed)> wrote:

> But you must address element as \$array[row]->[col] instead of
> \$array[row][col].

No you don't.

Both forms are equivalent.

--
email: perl -le "print scalar reverse qq/moc.noitatibaher\100cmdat/"

Anno Siegel
Guest
Posts: n/a

 08-30-2007
On 2007-08-30 16:44:57 +0200, "Petr Vileta" <(E-Mail Removed)> said:

[ \$array[ \$i]->[ \$k] vs. \$array[ \$i][ \$k] ]

> Right too. I remember that in some case \$array[row][col] generate error
> at runtime, some like "\$array[row][col] is not allowed while use strict
> refs", but I forgot details and context.

No, there is no such runtime error. An arrow (->) that appears in the
middle of a pair of
closing and opening parentheses (of any kind) can be dropped without a
change in meaning.

Anno