Извлечение данных из массива (интерполяция)

Мне нужен совет относительно проблемы, с которой я столкнулся в MATLAB:

У меня есть 4 переменные, я не уверен, какова наилучшая методология для этого. Сначала я думал о том, чтобы просто вычислить расстояние GreatCircle от каждой точки сетки до указанного местоположения и вернуть соответствующий индекс строки / столбца, который имеет минимальное расстояние. Но делая это таким образом, я не уверен, как я могу вычислить интерполяцию.

Я попытался преобразовать данные в векторные данные из 4 столбцов и запустить meshgrid, чтобы возможно использовать interp2. Но я закончил с этой ошибкой:

Запрашиваемый массив 109620x109620 (44,8 ГБ) превышает максимальный размер массива

Что может быть наиболее эффективным способом сделать это?

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)
Другие вопросы по тегам