Simil to VLOOKUP (but ismember index 0)

1 次查看(过去 30 天)
Hello, I have array A 10x1 and array B 3x2 as below
A=[1; 2; 3; 4; 5; 6; 7; 8; 9; 10];
B=[2 100; 4 500; 7 300];
I need to add to the A matrix the values according to the second column of B.
Output should be
A=[1 NaN; 2 100; 3 NaN; 4 500; 5 NaN; 6 NaN; 7 300; 8 NaN; 9 NaN; 10 NaN];
Cannot use ismember because I will have a 0 index (*)
Is there a way to solve this? Thanks

采纳的回答

Guillaume
Guillaume 2014-11-22
A simple way would be to fill the 2nd column of A with NaNs and replace some with logical addressing using ismember:
A=[1; 4; 3; 2; 5; 6; 7; 8; 9; 10]; %changed to make sure it works regardless of ordering
B=[2 100; 7 500; 4 300]; %changed to make sure it works regardless of ordering
A = [A nan(size(A, 1), 1)];
[row, locb] = ismember(A, B(:, 1));
A(row, 2) = B(locb(row), 2)
Another option is to use intersect instead of ismember and just use the indices it returns:
A=[1; 4; 3; 2; 5; 6; 7; 8; 9; 10]; %changed to make sure it works regardless of ordering
B=[2 100; 7 500; 4 300]; %changed to make sure it works regardless of ordering
A = [A nan(size(A, 1), 1)];
[~, ia, ib] = intersect(A, B(:, 1));
A(ia, 2) = B(ib, 2)

更多回答(1 个)

Dave
Dave 2014-11-24
Thanks a lot, that solves my problem.

类别

Help CenterFile Exchange 中查找有关 Multidimensional Arrays 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by