indexing multiple values in two arrays with different size
Show older comments
I have a simple problem that unfortunately I am failiing so solve (and to find solutions in internet).
Assuming I have 2 matrixes
a = [1 1 1 1 2 2 2 2 2 5 5 5; 0 0 0 0 0 0 0 0 0 0 0 0]';
b = [1 2 5; 11 12 15]';
I would like (without a for loop, that is my current, very slow implementation) to assign in a the corresponding values in the second column of b, when a(x, 1) == b(x,1). Basically the final result should be
a = [1 1 1 1 2 2 2 2 2 5 5 5; 11 11 11 11 12 12 12 12 12 15 15 15]
Thanks a lot for any help
Accepted Answer
More Answers (1)
Pietro
on 14 Feb 2019
4 Comments
madhan ravi
on 14 Feb 2019
Typing short lines of code doesn't make the code efficient:
tic
for k=1:1e5
a(:,2) = interp1(b(:,1), b(:,2), a(:,1));
end
toc
tic
for k=1:1e5
A=sum(a(:,1)==b(:,1).');
a(:,2)=repelem(b(:,2),A).';
end
toc
Gives:
Elapsed time is 10.439265 seconds. % interp1() method
Elapsed time is 1.281436 seconds. % other method
Pietro
on 14 Feb 2019
Pietro
on 15 Feb 2019
madhan ravi
on 15 Feb 2019
So instead of creating variable A in workspace why not directly implement it ?
a(:,2)=repelem(b(:,2),sum(a(:,1)==b(:,1).')).';
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!