adding rows to array with order

1 view (last 30 days)
sermet
sermet on 19 May 2016
Answered: Guillaume on 20 May 2016
data=[1.0452;1.0645;1.1027;1];
fixed_data=[1;1.0452];
for i=1:numel(fixed_data)
idx(i)=find(fixed_data(i)==data);
end
other_data=[1.064562;1.102656];
I need to merge fixed_data and other_data w.r.t idx as follows;
merged_data=[1.0452;1.064562;1.102656;1];
idx (4 1) determines 4th row of merged_data equals fixed_data(1) and first row of merged data equals fixed_data(2). Matrix dimensions are variable so I need to perform this as an automatic way for any situation.
  1 Comment
sermet
sermet on 19 May 2016
idx determines the order of merged_data w.r.t. fixed_data. idx (4 1) determines 4th row of merged_data equals fixed_data(1) and first row of merged data equals fixed_data(2).

Sign in to comment.

Accepted Answer

Guillaume
Guillaume on 20 May 2016
Note: this only works if all the elements of fixed_data are unique and only found once in data and if numel(fixed_data) + numel(other_data) == numel(data):
assert(numel(fixed_data) == numel(unique(fixed_data)), 'Duplicated values in fixed_data');
assert(numel(fixed_data) + numel(other_data) == numel(data), 'Vector sizes do not match');
[infixed, location] = ismember(data, fixed_data);
assert(numel(nonzeros(location)) == numel(unique(nonzeros(location))), 'Fixed_data found multiple times in data');
merged_data = data;
merged_data(~infixed) = other_data
You can take the asserts out if you're sure that the preconditions are fulfilled.

More Answers (1)

Azzi Abdelmalek
Azzi Abdelmalek on 19 May 2016
Edited: Azzi Abdelmalek on 19 May 2016
data=[1.0452;1.0645;1.1027;1]
fixed_data=[1;1.0452]
other_data=[1.064562;1.102656]
%---------------------------------
merged_data=data
idx=ismember(data,fixed_data)
merged_data(idx)=fixed_data
merged_data(~idx)=other_data
  3 Comments
Azzi Abdelmalek
Azzi Abdelmalek on 19 May 2016
Use
format long
merged_data
you will see the difference
sermet
sermet on 20 May 2016
Edited: sermet on 20 May 2016
Azzi, true merged_data is
merged_data=[1.0452;1.064562;1.102656;1];
your code produces
merged_data=[1;1.064562;1.102656;1.0452]

Sign in to comment.

Categories

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