Filter rows and columns with datas (find)

2 次查看(过去 30 天)
I'm performing longitude and latitude filters to effectively filter data from the file data_mat_h12v09_2010_195.mat:
'LatIndex' is all right with 16 identified latitudes. However, 'LonIndex' isn't entirely accurate; it's underestimating the number of longitudes it should find. It should be around 16 but is finding 121 instead. This can be verified in 'combined_filter = lat_filter & lon_filter;' and in the '% Plotting' section (https://drive.google.com/drive/folders/18GgPs-iN3brZHQ3pZNK8GyLt4SOmemY8?usp=drive_link).
The files 'load('Lat_and_Lon.mat')' are available on the Google Drive link due to their size of 10 MB.
clc; clear all
cd '/media/augusto/TOSHIBA EXT/output_modis_maiac/output_modis_maiac_h12v09'
%%
dir_path = '/media/augusto/TOSHIBA EXT/output_modis_maiac/output_modis_maiac_h12v09';
variable_name ='data';
data_aod = [];
load('Lat_and_Lon.mat')
file_list = dir(fullfile(dir_path, 'data_mat_h12v09_2010_195.mat'));
%%
% Define your latitude and longitude boundaries
lat_bounds = [-2.9580, -2.8231]; % Latitude interval
lon_bounds = [-60.0372, -59.9023]; % Longitude interval
% Filter for points within the specified latitude and longitude intervals
lat_filter = (lat_h12v09 >= lat_bounds(1)) & (lat_h12v09 <= lat_bounds(2));
lon_filter = (lon_h12v09 >= lon_bounds(1)) & (lon_h12v09 <= lon_bounds(2));
% plots para visualizar se a seleçao esta ok
% figure,pcolor(lon_h12v09,lat_h12v09,double(lon_filter)),shading flat
% figure,pcolor(lon_h12v09,lat_h12v09,double(lat_filter)),shading flat
% Create a combined filter for both latitude and longitude
combined_filter = lat_filter & lon_filter;
% plot para visualizar se a o combinado esta ok
% figure,pcolor(lon_h12v09,lat_h12v09,double(combined_filter)),shading flat
% Apply the filter to get the results
lat_resultado = lat_h12v09(combined_filter);
lon_resultado = lon_h12v09(combined_filter);
% plots para visualizar se os resultados estao ok
% figure,plot(lon_resultado)
% figure,plot(lat_resultado)
% figure,plot(lat_resultado,lon_resultado)
%%
% Plotting
% Define the corners of the square boundary
x = [lon_bounds(1), lon_bounds(2), lon_bounds(2), lon_bounds(1), lon_bounds(1)];
y = [lat_bounds(1), lat_bounds(1), lat_bounds(2), lat_bounds(2), lat_bounds(1)];
% Create the plot of the square with a transparent background
figure;
plot(x, y, 'b','LineWidth',4); % Blue lines for the square boundary
hold on; % Hold on to plot additional data on the same figure
scatter(lon_resultado, lat_resultado, 'r.'); % Plot the filtered points in red
% Additional plot formatting
xlabel('Longitude');
ylabel('Latitude');
title('Filtered Lat/Lon Points within Specified Bounds');
legend('Boundary', 'Filtered Points');
grid on; % Optional: Add a grid to the plot for better readability
% Check the results
disp('Number of points within the boundary:');
disp(sum(combined_filter)); % Display the count of points within the boundary
%%
% LatIndex=find(all(combined_filter,2));
% LonIndex=find(all(lon_filter,2));
[LonIndex, ~] = find(any(lon_filter == 1, 2));
[~, LatIndex] = find(any(lat_filter == 1, 1));
%%
erros_file_list = [];
for i = 1:length(file_list)
file_path = fullfile(dir_path, file_list(i).name);
disp(['Lendo arquivo: ', file_list(i).name]); % Nunca esquecer de adicionar esse comando nos scripts
try
load(file_path, variable_name); % Carrega a variável do arquivo .mat
% Filtrar os dados com base nas latitudes e longitudes desejadas
aod_data1 = eval(variable_name(:,:,1)); % Extrai a variável carregada
aod_data1 = aod_data1(LonIndex, LatIndex, 1);
% Adicionar os dados filtrados à matriz 'data'
data_aod = cat(3, data_aod, aod_data1);
catch ME
% Se houver um erro ao ler o arquivo .mat, exiba a mensagem de erro e continue para o próximo arquivo
disp(['Erro ao processar o arquivo ' fn(i).name]);
disp(ME.message);
erros_file_list = [erros_file_list; i]; % Adiciona o número do arquivo com erro à matriz erros_file_list
continue
end
end
  6 个评论
Star Strider
Star Strider 2024-1-3
When I did whos after load, there is only ‘data’ (and a couple other variables generated by the whos call).
Loading into a structure reveals —
S = load('data_mat_h12v09_2010_195.mat')
S = struct with fields:
data: [1200×1200×2 double]
That’s everything in the file.
Augusto Gabriel da Costa Pereira
you will only need "s(:,:,1)", similar to what is being shown in the loop, "data(:,:,1)". This file is not the problem.

请先登录,再进行评论。

采纳的回答

Sulaymon Eshkabilov
In this case, the combined filter data should be used:
[LonIndex, ~] = find(any(combined_filter, 2));
[~, LatIndex] = find(any(combined_filter, 1));
Instead of:
[LonIndex, ~] = find(any(lon_filter == 1, 2));
[~, LatIndex] = find(any(lat_filter == 1, 1));
  3 个评论
Sulaymon Eshkabilov
Most welcome glad to be of some help :). Happy New Year 2024!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Language Fundamentals 的更多信息

产品


版本

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by