Calculation of means in Narray objects

M

Milo Thurston

I'm trying to perform some calculations on data held in NArray objects
but it is not entirely clear to me how this ought to be done (I've
looked here: http://narray.rubyforge.org/SPEC.en). The data consist of
3-dimensional arrays, e.g. 10x10x100 elements. What I'd like to do is
calculate the means for the data at each for each of the first two
dimensions for positions of the third dimension. For example, 1,11,21...
then 2,12,22..., 3,13,23... &c. The end result would be a 10x10x10 array
where position [0,0,0] would contain the mean of the values in
[0,0,0],[0,0,9],[0,0,19]...[0,0,99] of the original array.
If this makes any sense to anyone I'd appreciate any suggestions.
 
M

Masahiro Tanaka

If you mean [0,0,0],[0,0,10],[0,0,20]...[0,0,90], try
narray.reshape(10,10,10,10).mean(3)

Milo said:
I'm trying to perform some calculations on data held in NArray objects
but it is not entirely clear to me how this ought to be done (I've
looked here: http://narray.rubyforge.org/SPEC.en). The data consist of
3-dimensional arrays, e.g. 10x10x100 elements. What I'd like to do is
calculate the means for the data at each for each of the first two
dimensions for positions of the third dimension. For example, 1,11,21...
then 2,12,22..., 3,13,23... &c. The end result would be a 10x10x10 array
where position [0,0,0] would contain the mean of the values in
[0,0,0],[0,0,9],[0,0,19]...[0,0,99] of the original array.
If this makes any sense to anyone I'd appreciate any suggestions.
 
M

Milo Thurston

Masahiro said:
If you mean [0,0,0],[0,0,10],[0,0,20]...[0,0,90], try
narray.reshape(10,10,10,10).mean(3)

Thanks. Would you mind pointing me in the direction of any documentation
on that particular method, please? I presume that the (10,10,10,10)
refers to the dimensions of the dimensions of the new array (the first
three 10s) and the step size to iterate (the last 10) but I am not sure
about the mean(3).
 
M

Masahiro Tanaka

Thanks. Would you mind pointing me in the direction of any documentation
on that particular method, please?

http://narray.rubyforge.org/SPEC.en
is the only documentation.
I presume that the (10,10,10,10)
refers to the dimensions of the dimensions of the new array (the first
three 10s) and the step size to iterate (the last 10)

reshape changes the shape of NArray without changing internal
arrangement.
In this case, it changes the last dimension with 100 elements into
2-dimensions with 10x10 elements.
but I am not sure about the mean(3).

in SPEC.en:

Statistics
self.mean(dim,..) Mean
...
note: * If dimensions are specified, statistics are performed
on those dimensions and the rest dimensions are kept.
* Range can be used.
* If dimension is not specified, statistics are performed
for all the elements.
 
M

Milo Thurston

Masahiro said:
reshape changes the shape of NArray without changing internal
arrangement.
In this case, it changes the last dimension with 100 elements into
2-dimensions with 10x10 elements.

Thanks again.
Apologies for the nuisance, but I would like to ask one further question
in order to assist in my understanding. If I have an array that's
96x73x1680 and would like to take the mean of every 12th element from
the 3rd dimension, ending up with 96x73x12 (each point in the 3rd
dimension is therefore the mean of 140 points from the original array),
would it be correct to use:

new = narray.reshape!(96,73,12,140).mean(3)

?
note: * If dimensions are specified, statistics are performed
on those dimensions and the rest dimensions are kept.

Ah, I see.
 
M

Masahiro Tanaka

Milo said:
Apologies for the nuisance, but I would like to ask one further question
in order to assist in my understanding. If I have an array that's
96x73x1680 and would like to take the mean of every 12th element from
the 3rd dimension, ending up with 96x73x12 (each point in the 3rd
dimension is therefore the mean of 140 points from the original array),
would it be correct to use:

new = narray.reshape!(96,73,12,140).mean(3)

?

Right.
Note that reshape! changes the shape of original narray without creating
new object.
reshape creates new object with new shape.
 
M

Milo Thurston

Masahiro said:
Right.
Note that reshape! changes the shape of original narray without creating
new object.
reshape creates new object with new shape.

The "!" was a mistake, I meant to do this:
new = narray.reshape(96,73,12,140).mean(3)

That seems to be working as expected - thanks again!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top