2D array of real numbers

2D array of real numbers

am 29.08.2007 15:48:32 von jeanluc

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!

Re: 2D array of real numbers

am 29.08.2007 15:51:40 von Peter Makholm

jeanluc 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::Dumper -le '$a = [ (0.0) x 10 ]; print Dumper $a'

//Makholm

Re: 2D array of real numbers

am 29.08.2007 16:22:22 von Mirco Wahab

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.

Re: 2D array of real numbers

am 29.08.2007 20:33:30 von jeanluc

Works great!

Thanks!!

Re: 2D array of real numbers

am 30.08.2007 02:54:58 von Petr Vileta

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;

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

Petr Vileta, Czech republic
(My server rejects all messages from Yahoo and Hotmail. Send me your mail
from another non-spammer site please.)

Re: 2D array of real numbers

am 30.08.2007 03:20:37 von Dummy

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

Re: 2D array of real numbers

am 30.08.2007 12:50:23 von Tad McClellan

Petr Vileta wrote:

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


No you don't.

Both forms are equivalent.


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

Re: 2D array of real numbers

am 30.08.2007 16:44:57 von Petr Vileta

John W. Krahn wrote:
> Petr Vileta wrote:
>>> $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.

Right ;-)
my $no_rows = 50;
my $no_columns = 63;
my @row=(0.0)x$no_columns;
my @array;
foreach (1..$no_rows) { push @array,[@row]; }

>> But you must address element as $array[row]->[col] instead of
>> $array[row][col].
>
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.
--

Petr Vileta, Czech republic
(My server rejects all messages from Yahoo and Hotmail. Send me your mail
from another non-spammer site please.)

Re: 2D array of real numbers

am 30.08.2007 22:23:44 von Anno Siegel

On 2007-08-30 16:44:57 +0200, "Petr Vileta" 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