array operation for merging two arrays

data_1=[10;20;30;40];
data_2=[40;10];
data_3=[11;12];
for i=1:numel(data_2)
idx(i)=find(data_2(i)==data_1);
end
I need to merge data_2 and data_3 w.r.t idx array as follows;
merged_data=[10;11;12;40];
idx ([4 1]) determines the row number of 40 and 10 (data_2) within merged_data. Other row of the merged_data belongs to data_3.
data_2 and data_1 arrays always share at least 2 numbers. I need to merge data_2 and data_3 as an automatic way, keeping the order of rows w.r.t idx.

2 comentarios

sermet
sermet el 20 de Mayo de 2016
Azzi, please read my comment in the previous question.

 Respuesta aceptada

Andrei Bobrov
Andrei Bobrov el 20 de Mayo de 2016
Editada: Andrei Bobrov el 20 de Mayo de 2016
union(intersect(data_1,data_2),data_3)
or
merge_data = data_1
merge_data(~ismember(merge_data,data_2)) = data_3

1 comentario

sermet
sermet el 20 de Mayo de 2016
Editada: sermet el 20 de Mayo de 2016
Andrei, it doesn't work all the time. Assume,
data_2=[20;30];
idx=[2 3];
Then, merged_data should be;
merged_data=[11;20;30;12];
but merged_data from your code;
merged_data=[11;12;20;30]; % it is ascending mode thus the order cannot be protected.
20 should be in the second row of the merged_data and 30 should be in the 3rd row of the merged_data w.r.t. idx array.

Más respuestas (0)

La pregunta está cerrada.

Preguntada:

el 20 de Mayo de 2016

Cerrada:

el 20 de Mayo de 2016

Community Treasure Hunt

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

Start Hunting!

Translated by