Find the elements of a ND matrix given the index of the elements
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Asif Newaz
am 29 Apr. 2020
Kommentiert: Asif Newaz
am 29 Apr. 2020
[b,idx]=min(a,[],2) -- gives the value as well as the index of the min value of each row of matrix a.
Now the ques is - how to get b if i've 'a' & 'idx'.
For 2D,i can use a for loop to do it.
But how to do it for ND scenarios?
For example,
a=[0.8147 0.9134 0.2785
0.9058 0.6324 0.5469
0.1270 0.0975 0.9575]
b=[0.2785
0.5469
0.0975]
idx=[3
3
2]
for i=1:length(idx)
b(i)=a(i,idx(i));
end
-- it'll do for 2D.
2 Kommentare
Akzeptierte Antwort
Stephen23
am 29 Apr. 2020
Bearbeitet: Stephen23
am 29 Apr. 2020
Surprisingly there is no trivial way to do this, but one general solution is to generate linear indices, e.g.:
% input data (any ND array and the corresponding output index from MIN or MAX):
a = [0.8147,0.9134,0.2785;0.9058,0.6324,0.5469;0.1270,0.0975,0.9575]; % ND array.
idx = [3;3;2] % indices, must be the same orientation as returned by MIN or MAX.
% sizes of input data:
idx = double(idx);
sza = size(a);
szn = size(idx);
szn(end+1:numel(sza)) = 1;
idd = szn~=sza;
% linear indices:
tmp = arrayfun(@(n)1:n,szn,'uni',0);
[tmp{:}] = ndgrid(tmp{:});
tmp{idd} = idx;
ndx = sub2ind(sza,tmp{:});
You can use the linear indices very simply:
>> a(ndx)
ans =
0.2785
0.5469
0.0975
0 Kommentare
Weitere Antworten (0)
Siehe auch
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!