重复的表值具有相同的大小

时间:2015-08-05 08:06:44

标签: matlab

我有两张不同大小的桌子。我使用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

2 个答案:

答案 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);