adding rows to array with order

1 Ansicht (letzte 30 Tage)
sermet
sermet am 19 Mai 2016
Beantwortet: Guillaume am 20 Mai 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 Kommentar
sermet
sermet am 19 Mai 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).

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Guillaume
Guillaume am 20 Mai 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.

Weitere Antworten (1)

Azzi Abdelmalek
Azzi Abdelmalek am 19 Mai 2016
Bearbeitet: Azzi Abdelmalek am 19 Mai 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 Kommentare
Azzi Abdelmalek
Azzi Abdelmalek am 19 Mai 2016
Use
format long
merged_data
you will see the difference
sermet
sermet am 20 Mai 2016
Bearbeitet: sermet am 20 Mai 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]

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by