# match vector with first column of matrix

2 views (last 30 days)
SChow on 5 Feb 2020
Edited: Stephen23 on 5 Feb 2020
I have a matrix 'Mat' and a vector 'v', I want to match the vector 'v' with the first row of 'Mat' such that I get an output 'res'. I tried using the ismember function and a code mentioned below
Mat=[1 356
4 457
7 91
6 431
9 33
10 322 ]
v =[NaN 1 7 NaN 1 9 6 NaN 6 6]
res= [NaN NaN
1 356
7 91
NaN NaN
1 356
9 33
6 431
NaN NaN
6 431
6 431]
%%%%%%code I tried but did not work, it does not give numbers for repetative occurences of elemet in vector B
idx=setdiff(v,Mat(:,1)).';
ans=zeros(numel(idx),1);
idx=[idx' ans];
res=sortrows([Mat;idx]);
##### 1 CommentShowHide None
SChow on 5 Feb 2020
I tried a different code, but as the original length of v is 37324800x1 double, Matlab could not process the data
v=v';
bsxfun(@minus,Mat(:,1),scode);
[~,minRow] = min(abs(bsxfun(@minus,Mat(:,1),v)));
res = [ v.', Mat(minRow,2:end) ];

Sign in to comment.

### Accepted Answer

Stephen23 on 5 Feb 2020
Edited: Stephen23 on 5 Feb 2020
Simpler with just one ismember call and some basic indexing:
>> [idx,idy] = ismember(v(:),Mat(:,1));
>> res = [v(:),v(:)];
>> res(idx,2) = Mat(idy(idx),2)
res =
NaN NaN
1 356
7 91
NaN NaN
1 356
9 33
6 431
NaN NaN
6 431
6 431
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### More Answers (1)

David Hill on 5 Feb 2020
res=[v',nan(length(v),1)];
a=unique(v);
a=a(~isnan(a));
for j=1:length(a)
res(ismember(v,a(j)),2)=Mat(ismember(Mat(:,1),a(j)),2);
end
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### Categories

Find more on Creating and Concatenating Matrices 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!

Translated by