匹配不同大小的矩阵并在MATLAB中创建新矩阵

时间:2017-11-23 22:32:20

标签: matlab if-statement matrix compare

我有一个矩阵AB如下:

A = [1 NaN 3 4 5 NaN NaN 8 9 10];
B = [2 6 7];

矩阵B的大小与矩阵NaN中的A值相同(在这种情况下为3x1)。

我希望以与NaN中显示的值相同的顺序替换B值。所以输出应该如下:

C = [1 2 3 4 5 6 7 8 9 10];

如果两个矩阵的大小相同,我可以替换NaN。对于T = 10N = 1,我会使用:

for t=1:T
    for i=1:N
        if A == NaN
        C(t,i) = B;
        else
        C(t,i) = A(t,i);
        end
    end
end

但是,我想知道是否可以比较这些矩阵并替换值,即使矩阵的大小不同?换句话说,如果A = NaNB的第一个值。对于下一个A = NaN,请使用B中的第二个值。

1 个答案:

答案 0 :(得分:2)

您可以这样做:

A(find(isnan(A))) = B; % store the result of find(...) to keep track of NaN indices

isnan()是确定某个值是NaN(从NaN ~= NaN开始)的正确方法,而find()则返回A所指的元素的索引在这种情况下是NaN

根据@Adiel的建议,您可以使用逻辑索引来更紧凑地实现相同的结果,前提是您稍后不需要NaN元素的索引:

A(isnan(A)) = B;