interpolate 3 dimensional arrays (in time and space)

2 ビュー (過去 30 日間)
wave_buoys
wave_buoys 2018 年 8 月 28 日
コメント済み: wave_buoys 2018 年 8 月 29 日
Hi all,
I have 3D matrix 180x90x120 which is equal to lonxlatxtime. In space, the data has 1 degree resolution (e.g. longitude ranges from 1 to 180), while the time interval is 3 hours (e.g. 3h, 6h, 9h.....).
Now I want to interpolate data to get a finer resolution of 0.5 degree and with 1-hour interval, so the new matrix would be 360x180x360.
Could you please help?
Thanks
  4 件のコメント
Matt J
Matt J 2018 年 8 月 28 日
編集済み: Matt J 2018 年 8 月 28 日
No, do not use griddata for this. KL's suggestion of griddedInterpolant was appropriate. See also my second answer.
Matt J
Matt J 2018 年 8 月 28 日
編集済み: Matt J 2018 年 8 月 28 日
Now I want to interpolate data to get a finer resolution of 0.5 degree and with 1-hour interval, so the new matrix would be 360x180x360.
Those will not be the new dimensions. If you sample from 1 to 180 at intervals of 0.5, you will obtain 359 points, not 360. Similarly for the other dimensions.

サインインしてコメントする。

採用された回答

Matt J
Matt J 2018 年 8 月 28 日
編集済み: Matt J 2018 年 8 月 28 日
F=griddedInterpolant(yourData);
qlon=(1:.5:180);
qlat=(1:.5:90);
qtime=(1:1/3:120);
newData=F({qlon,qlat,qtime});
  2 件のコメント
wave_buoys
wave_buoys 2018 年 8 月 29 日
THIS WORKS FOR ME!!!!!!!! THANKS MATT
wave_buoys
wave_buoys 2018 年 8 月 29 日
Dear Matt J,
Sorry. It works but the outcomes are not as I expected. Particularly the new results look weird. Perhaps I also misunderstood about the input matrix format. To be corrected, the 3D matrices I mentioned, for instance, 180x90x120 contains 120 2D arrays size (180x90) for monthly wind speeds in Longitude and Latitude direction. These 120 matrices correspond to a 1D time matrix (which is separated): 0h 6h 12h 18h.....720h..
So when I use:
v = winddata % (size: 180x90x120)
F= griddedInterpolant(v)
qlon=(1:.5:180)
qlat=(1:.5:90);
qtime=(1:1/3:120);
newwinddata=F({qlon,qlat,qtime});
it does not work properly because time does not present in griddedInterpolant(v).
May you help more? Thanks

サインインしてコメントする。

その他の回答 (1 件)

Matt J
Matt J 2018 年 8 月 28 日
編集済み: Matt J 2018 年 8 月 28 日
You could download IMRESIZEN, and then do things like,
>> A=rand(180,90,120); B=imresizen(A,[2,2,3]); whos B
Name Size Kilobytes Class Attributes
B 360x180x360 182250 double
  2 件のコメント
wave_buoys
wave_buoys 2018 年 8 月 28 日
編集済み: Matt J 2018 年 8 月 28 日
Thanks Matt, but it does not for my situation because Imresizen just scales up the data.
Has anyone done something similar to this? May you help?
Thanks
Matt J
Matt J 2018 年 8 月 28 日
How is that different from what you are trying to do?

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeInterpolation についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by