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).
adding rows to array with order
조회 수: 1 (최근 30일)
이전 댓글 표시
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.
채택된 답변
Guillaume
2016년 5월 20일
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.
댓글 수: 0
추가 답변 (1개)
Azzi Abdelmalek
2016년 5월 19일
편집: Azzi Abdelmalek
2016년 5월 19일
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
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrices and Arrays에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!