[Thread Prev][Thread Next][Index]

Re: [ferret_users] EOf of 3d data



Hi,
Yes, those functions expect the spatial variation to be in XY. You could do the calculation by defining a fake XY grid and using RESHAPE to put your variable onto that grid. Because Ferret grids are stored with the data varying fastest in the X and then Y direction this will keep the data order intact.

so, the new grid has an x axis the length of your grid's y axis, a y axis the length of your z axis:

yes? def axis/x=1:`ny`:1 xfake
yes? def axis/y=1:`nz`:1 yfake

yes? let var_with_grid =  x[gx=xfake] + y[gy=yfake] +t[gt=T_20FLNNEW]
yes? let var_xyt = RESHAPE (T_20FLNNEW, var_with_grid)

Then call the EOF functions using var_xyt, and finally put the results back on the original yz grid with another RESHAPE function.

Please have a look at the EOFSVD functions. They are faster than the EOF family of functions. As long as your data does not have gaps they are the better choice.

Ansley

On 7/2/2014 10:14 PM, Shreya Dhame wrote:
Hi,

I want to use the method of Empirical Orthogonal Function (EOF) analysis to decompose the spatiotemporal data in orthogonal modes. My data is in 3d matrix in the form (time(t), lat(y), depth(z)). I tried the eof_space,eof_stat and eof_tfunc given in ef_eof_demo.jnl but did not get valid results.Are these functions only for x.y.t data?

SET MODE VERIFY
USE merge7y.cdf

LET eofspace = eof_space(T_20FLNNEW, 0.5)
SAVE/CLOBBER/FILE=merge7y_eof_space.cdf eofspace

can variable/all

use merge7y_eof_space.cdf
set view ul; fill/l=1/title="eof 1" eofspace
set view ur; fill/l=2/title="eof 2" eofspace

USE merge7y.cdf

LET eofstat = eof_stat(T_20NEW, 0.5)
let nout =  eofstat[i=1,j=1]

SAVE/CLOBBER/FILE=merge7y_eof_stat.cdf eofstat[i=1:`nout`]

can var/all

use merge7y_eof_stat.cdf

let nout = eofstat[i=1,j=1,d=merge7y_eof_stat]
let pcts = eofstat[i=1:`nout`,j=2,d=merge7y_eof_stat]
let eigenv = eofstat[i=1:`nout`,j=3,d=merge7y_eof_stat]

list nout
list pcts
list eigenv

USE merge7y.cdf
LET eoftime = eof_tfunc(T_20NEW, 0.5)

SAVE/CLOBBER/FILE=M1215_eof_tfunc.cdf eoftime[i=1:`nout`]

can var/all
use merge7y_eof_tfunc.cdf
can view

set view ul; plot/k=1/title="time function 1" eoftime
set view ur; plot/k=2/title="time function 2" eoftime

set mode/last verify


--Thank you



[Thread Prev][Thread Next][Index]
Contact Us
Dept of Commerce / NOAA / OAR / PMEL / Ferret

Privacy Policy | Disclaimer | Accessibility Statement