assignment string values corresponding to index from cell array
이전 댓글 표시
Please have a look to the following code, how can I assign string values corresponding to the index (ind_logical) from cell (files) in to the new cell (filesout). Thanks
Files = dir(fullfile(pth, ncfiles));
files = arrayfun(@(X) fullfile(pth, X.name), Files, 'uni', 0);
%
% Format latlim,lonlim:
% Wrap longitudes to 180:
latlim = [41 48]; lonlim = [27 48];
lonlim(lonlim>180) = lonlim(lonlim>180)-360;
% If two elements are input, assume user wants floats bound by geoquad:
if numel(latlim)==2
latv = [latlim(1) latlim(1) latlim(2) latlim(2)];
lonv = [lonlim(1) lonlim(2) lonlim(2) lonlim(1)];
else
latv = latlim;
lonv = lonlim;
end
% Initialize arrays that we'll try to populate:
filesout = {};
latout = [];
lonout = [];
for lf = 1 : length(files)
%try
filename = files{lf,1};
lat = ncread(filename,'LATITUDE');
lon = ncread(filename,'LONGITUDE');
[inpoly,onpoly] = inpolygon(lon,lat,lonv,latv);
[inpoly,onpoly] = inpolygon(lon,lat,lonv,latv);
inpoly = inpoly+onpoly;
ind = inpoly; ind_logical = logical(ind);
latout = [latout;lat(ind_logical)];
lonout = [lonout;lon(ind_logical)];
%filesout = [filesout;files(ind_logical)];
%filesout = arrayfun(@(x) x , files(ind_logical), 'UniformOutput', false);
%end
end
댓글 수: 4
Guillaume
2020년 1월 29일
It's not clear from your code what relationship there is between inpoly, a logical array based on the data in one file and the list of all files. Assuming that inpoly has equal or less elements than the list of files, you could use it to index that list as you have done, but are you sure that's really what you want to do?
Beside this, it's unclear why you have the same function call in two successive lines. It's going to return the same values each time. In addition, if you use a logical or | instead of + you don't need to bother converting back to logical and you certainly don't need 3 variables to do that
[inpoly ,onpoly] = inpolygon(lon,lat,lonv,latv); %don't need to do it twice
inpoly = inpoly | onpoly; %logical OR. inpoly stays logical, no need for ind, or ind_logical
latout = [latout; lat(inpoly)];
lonout = [lonout; lon(inpoly)];
However, note that as documented, inpoly also includes onpoly, so even the logical or is not needed:
inpoly = inpolygon(lon, lat, lonv, latv); %inpoly also includes points ON the polygon
latout = [latout; lat(inpoly)];
lonout = [lonout; lon(inpoly)];
Farshid Daryabor
2020년 1월 30일
Guillaume
2020년 1월 30일
What are the desired parameters? If it's latout and lonout, you already have got these. If it's something else, please clarify.
Farshid Daryabor
2020년 1월 30일
답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Coordinate Reference Systems에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!