create matrix from loop in matlab

1 Ansicht (letzte 30 Tage)
sb
sb am 8 Feb. 2017
Beantwortet: Andrei Bobrov am 14 Aug. 2017
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?

Antworten (2)

Andrei Bobrov
Andrei Bobrov am 14 Aug. 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,:)});

Jan
Jan am 14 Aug. 2017
Bearbeitet: Jan am 14 Aug. 2017
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

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by