Find the position of numbers in array

8 views (last 30 days)
Marco Piazza on 30 Sep 2022
Edited: Ergin Sezgin on 30 Sep 2022
Hello everybody, I'm trying to find the position of some values in an array. The values i'm interested in are in a 1x182 vector and I want to find they're position in a 1x1820 vector (practically I'm just looking for a percentile). Can you guess how I can find them?
PS: i did it with a for loop using the find function but i think it is a non-efficient way, there must be an easier and fast way!
Marco

Walter Roberson on 30 Sep 2022
percent_present = mean(ismember(SmallVector, LargeVector)) * 100

Star Strider on 30 Sep 2022
I am not certain what you are asking.
Perhaps using the ismember (or ismembertol) function will do what you want.
Star Strider on 30 Sep 2022
Getting them is straightforward. Getting them in that exact order requires a bit of coding gymnastics —
a = [4 5 7 2 1 6 3 9 8];
b = [2 7 8];
[~,idx] = ismember(a, b);
[idx_sorted,sortidx] = sort(idx(idx>0));
idx2 = find(idx);
Result = idx2(sortidx)
Result = 1×3
4 3 9
.

Ergin Sezgin on 30 Sep 2022
Edited: Ergin Sezgin on 30 Sep 2022
Hello Marco,
rng(2022)
inputArray = 100*rand(1,1820); % you should use your array
selectedElems = randperm(1820,182); % random indexing for subset,
elemPositions = zeros(size(yourVector)); % result vector for determined positions
for i=1:size(yourVector,2)
elemPositions(1,i) = find(inputArray==yourVector(1,i));
end
isequal(selectedElems, elemPositions) % Compare real and determined positions
ans = logical
1
Good luck

Categories

Find more on Logical in Help Center and File Exchange

R2021a

Community Treasure Hunt

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

Start Hunting!