我有两张不同大小的桌子。我使用Matlab,并不重要,我只需要这样做的逻辑
第一个表包含8个元素,第二个表包含3个
0.04 0.1
0.08 0.2
0.12 0.3
0.16
0.20
0.24
0.28
0.32
我想比较两个表,在第二个表中重复相同的值,而tab1(i)< tab2(i)为了获得两个相同大小的表,结果必须像这样
0.04 0.1
0.08 0.1
0.12 0.2
0.16 0.2
0.20 0.2
0.24 0.3
0.28 0.3
0.32 0.0
我试过这个
for ii=1:sizex1(1)
for jj=1:ssimagefile
if x2imagefile(jj)<=z1(ii)
tab2(ii)=z1(ii)
fprintf(file, '%f %f \n', [ii tab2]');
jj=jj+1;
else
ii=ii+1;
end
end
答案 0 :(得分:2)
以下是Matlaby的方法:
%// Add zeros to the end of tab2 so that it is as long as tab1
tab3(numel(tab1)) = 0;
%// use bsxfun to find for each number, which rows it will be replicated into
I = bsxfun(@le, tab1, tab2') & bsxfun(@gt, tab1, [-inf,tab2(1:end-1)']);
%// use find to convert the rows from the step before to indexes of where the numbers lie in tab1
[~,c] = find(I);
%// populate tab3 with the repeated numbers from tab2
tab3(1:numel(c)) = tab2(c);
使用for循环的一种更简单的方法:
tab3 = zeros(size(tab1));
for row = 1:numel(tab1)
idx = tab2 > tab1(row);
if any(idx)
tab3(row) = min(tab2(idx));
end
end
答案 1 :(得分:0)
如果您希望避免bsxfun
:
tab2_sorted = sort(tab2); % Sort tab2
tab3=zeros(size(tab1)); % Initialize the new table
% Fill the new table with the values of tab2
tab3(tab1<=tab2_sorted(3))=tab2_sorted(3);
tab3(tab1<=tab2_sorted(2))=tab2_sorted(2);
tab3(tab1<=tab2_sorted(1))=tab2_sorted(1);