create matrix from loop in matlab
Afficher commentaires plus anciens
from the following code,
h=200; k=200;
for i=1:400;
for j=1:400;
a= round(atan2(h-i,-(k-j))*180/pi);
b(i,j)=[a];
end
end
how can I get (i,j) values for 0<= a <=5 because I want use those indexes to read elements from a "data(i,j)" matrix. Moreover, I want to get (i,j) for several ranges, say 5<= a <=10, 10<= a <=15,...85<= a <=90. How can I perform this?
Réponses (2)
Andrei Bobrov
le 14 Août 2017
[ii,jj] = ndgrid(1:400);
x = [ii(:),jj(:)];
a = round(atan2d(200 - ii(:), jj(:) - 200));
idx = discretize(a,0:5:90);
t = ~isnan(idx);
xx = x(t,:);
aa = a(t);
out_idx = accumarray(idx(t),(1:numel(aa))',[],@(x){xx(x,:)});
The linear index is usually more efficient than the row and column indices:
% 0<= a <=5
index = (0 <= b) & (b <= 5);
But you can get the different indices also:
[i1, i2] = find((0 <= b) & (b <= 5));
For the set of ranges see
doc discretize
Catégories
En savoir plus sur Loops and Conditional Statements dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!