Azzera filtri
Azzera filtri

Replace values in one column based on the content in several other columns.

2 visualizzazioni (ultimi 30 giorni)
Hi
I have two matrices containing x,y and z coordinates. These matrices also contain a column with values for each point.
Looks something like this:
A=[x y z value, 1 1 1 1; 1 2 1 0, 2 1 1 3, 2 1 2 4]
B=[x y z value, 1 1 1 1; 1 2 1 0]
the first matrix (A) have much more values than the second one (B). What i am trying to do is to replace the values in the large matrix (A) with the values from the smaller matrix (B) whenever the coordinates are the same. Thus the values in the x y and z column need to match.
Any ideas how to solve this?

Risposta accettata

Bruno Luong
Bruno Luong il 13 Nov 2018
A = [1 1 1 0;
1 2 1 1;
2 1 1 3;
1 1 1 3;
2 1 2 4]
B = [1 1 1 1;
1 2 1 0]
[b,loc] = ismember(A(:,1:3),B(:,1:3),'rows');
A(b,:) = B(loc(b),:);
The result after replacement is
A =
1 1 1 1
1 2 1 0
2 1 1 3
1 1 1 1
2 1 2 4

Più risposte (1)

madhan ravi
madhan ravi il 13 Nov 2018
A=[ 1 1 1 1; 1 2 1 0; 2 1 1 3; 2 1 2 4] %perhaps?
B=[ 1 1 1 1; 1 2 1 0]
index=ismember(A(1:3,:),B,'rows')
A(index,:)=somevalues

Community Treasure Hunt

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

Start Hunting!

Translated by