This question is closed. Reopen it to edit or answer.
How to use an index of a vector as a value in another matrix?
2 views (last 30 days)
Hi, I have a vector x=[1 1 2 2 3] and a matrix [1 3 ; 1 4 ; 2 3 ; 2 4]
The logic that I want to create says that the index of the latter of the similar values is extracted. Then, wherever the matrix has that value, that row becomes zero. For example, the indices of first two similar values in vector x are 1 and 2. I want those rows in the matrix that contains the value 2, should become zero. Same is the case for 3 and 4.
In the end, the matrix should only contain a single row i.e. [1 3]
dpb on 3 Aug 2017
>> x=[1 1 2 2 3] ;
>> m= [1 3 ; 1 4 ; 2 3 ; 2 4];
Alex Kerzner on 3 Aug 2017
I'm sure someone can come up with something more clever and efficient, but here's something hack-y that might give you some ideas for improvements. Assuming the matrix is called M :
repeats = ;
if numel(find(x == x(1))) >= 2 %If we have multiple of them
repeats(end+1) = max(find(x==x(1))); %add the largest index to the list
x(find(x==x(n))) = ; %remove all the duplicates
x(1) = ; %If no duplicates, just get rid of it
for r = repeats
[i,~] = find(M == r);
M(i,:) = ;
Matthew Eicholtz on 3 Aug 2017
How about this?
Assume you have the inputs:
x = [1,1,2,2,3];
y = [1,3; 1,4; 2,3; 2,4];
Then, you can find indices to remove by:
[~,ind,~] = unique(fliplr(x));
ind = length(x)-ind+1;
Then, remove the rows containing any of those indices:
y(any(ismember(y,ind),2),:) = ;