【问题标题】:Extracting data from array (interpolation)从数组中提取数据(插值)
【发布时间】:2017-12-29 15:08:06
【问题描述】:

我需要一些关于我在 MATLAB 中遇到的问题的建议:

我有 4 个变量,我不确定执行此操作的最佳方法是什么。我最初考虑只计算从每个网格点到指定位置的 GreatCircle 距离,并返回具有最小距离的相应行/列索引。但是这样做,我不确定如何计算插值。

我尝试将数据重塑为 4 列的矢量数据并运行 meshgrid 以可能利用 interp2。但我最终得到了这个错误:

请求的 109620x109620 (44.8GB) 数组超出了最大数组大小首选项

最有效的方法是什么?

【问题讨论】:

  • 矩阵的维度是多少?可能LatitudeLongitude 已经是网格?

标签: matlab interpolation


【解决方案1】:

您正在处理大型数组。如果interp2 无法处理它,请改为使用子数组:

% Create data
format shortG
[Latitude,Longitude] = meshgrid(1:12,1:12);
Altitude = floor(1000+sortrows(rand(12,12))*1000);
Temperature = 10+20*rand(12,12);

Lat = 2.1;
Lon = 11.8;

% Find closest match point
[~,i_Lat] = min(abs(Latitude(1,:)-Lat));
[~,i_Lon] = min(abs(Longitude(:,1)-Lon));

% Select subarrays around this point. 
% Minimum size of these matrices depend on the type of interpolation you perform
ia1 = max(1,i_Lat-5);
ia2 = min(size(Latitude,1),i_Lat+5);
io1 = max(1,i_Lon-5);
io2 = min(size(Latitude,2),i_Lon+5);

subLatitude = Latitude(io1:io2,ia1:ia2);
subLongitude = Longitude(io1:io2,ia1:ia2);
subAltitude = Altitude(io1:io2,ia1:ia2);
subTemperature = Temperature(io1:io2,ia1:ia2);

% Interpolate on these small arrays, and evaluate at target (Lat, Lon) point
A_out = interp2(subLatitude, subLongitude, subAltitude, Lat, Lon)
T_out = interp2(subLatitude, subLongitude, subTemperature, Lat, Lon)

【讨论】:

  • 感谢 Laure 的建议,我想知道为什么 ia 和 io 计算中有 -5/+5 吗?
  • @Corse。您只想插入目标点周围的数组子集。 +-5 是任意的(线性插值 +-2 也可以)。
  • 我明白了。如果应该使用 interp2 的样条插值,这应该是什么值?我猜-5 / + 5会做,对吧?这基本上提供了更多用于插值的数据点?
  • 我刚刚在上面回答了你。使用我提供的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多