How to find particular elements of matrix?

1 view (last 30 days)
Ammy on 22 Aug 2021
Commented: Walter Roberson on 22 Aug 2021
A=reshape(1:36,6,6);
How to select the following elements of matrix
7,25,
2,14,20,32
9,27
10,28
5,17,23,35
12,30
these can be find like this
A(1,2)=7, A(1,4)=25....
But is there any generalized way which help even for large matrices.

Walter Roberson on 22 Aug 2021
A=reshape(1:36,6,6)
A = 6×6
1 7 13 19 25 31 2 8 14 20 26 32 3 9 15 21 27 33 4 10 16 22 28 34 5 11 17 23 29 35 6 12 18 24 30 36
targets = {
[7,25]
[2,14,20,32]
[9,27]
[10,28]
[5,17,23,35]
[12,30]
}
targets = 6×1 cell array
{[ 7 25]} {[2 14 20 32]} {[ 9 27]} {[ 10 28]} {[5 17 23 35]} {[ 12 30]}
for K = 1 : length(targets)
[~, locations{K}] = ismember(targets{K}, A(K,:));
end
celldisp(locations)
locations{1} = 2 5 locations{2} = 1 3 4 6 locations{3} = 2 5 locations{4} = 2 5 locations{5} = 1 3 4 6 locations{6} = 2 5
Walter Roberson on 22 Aug 2021
You have two index patterns:
1. columns 2 and 5
2. columns 1, 3, 4, 6
However, it is not obvious which pattern is to be applied to which row. The longer extracts are rows 2 and 5, which happens to match the column numbers for the shorter rows, but will that always be the case?
You talk about larger matrices, but do not give us any information about how the accesses will generalize. For example are we to deduce that 2, 5 is "second and second-last" ? Are we to deduce that 1, 3, 4, 6 is "first, two middle, last", or are we to deduce that it "everything not selected by the previous pattern" ?