在MATLAB中匹配不同大小的矩阵并生成新矩阵

在MATLAB中匹配不同大小的矩阵并生成新矩阵,matlab,if-statement,matrix,compare,Matlab,If Statement,Matrix,Compare,我有一个矩阵a和B,如下所示: A = [1 NaN 3 4 5 NaN NaN 8 9 10]; B = [2 6 7]; 矩阵B与矩阵A中的NaN值大小相同(本例中为3x1) 我想按照与B中出现的值相同的顺序替换NaN值。因此,输出应该如下所示: C = [1 2 3 4 5 6 7 8 9 10]; 如果两个矩阵的大小相同,我可以替换NaN。对于T=10和N=1,我将使用: for t=1:T for i=1:N if A == NaN C(t,

我有一个矩阵
a
B
,如下所示:

A = [1 NaN 3 4 5 NaN NaN 8 9 10];
B = [2 6 7];
矩阵
B
与矩阵
A
中的
NaN
值大小相同(本例中为3x1)

我想按照与
B
中出现的值相同的顺序替换
NaN
值。因此,输出应该如下所示:

C = [1 2 3 4 5 6 7 8 9 10];
如果两个矩阵的大小相同,我可以替换
NaN
。对于
T=10
N=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=NaN
B
的第一个值。对于下一个
A=NaN
B
中的第二个值,您只需执行以下操作:

A(find(isnan(A))) = B; % store the result of find(...) to keep track of NaN indices
是确定值是否为
NaN
(因为
NaN~=NaN
)的正确方法,而在这种情况下,返回
a
的索引,其中元素为
NaN


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

A(isnan(A)) = B;

非常感谢。这是一个很好的观点。但是,只要执行代码,就会得到“在赋值A(:)=B中,A和B中的元素数必须相同”,因为A的大小为10x1,B的大小为3x1。@Joe,这很奇怪
A(find(isnan(A))
应该为您提供一个3x1矩阵,您可以将另一个3x1矩阵分配给它,除非
A
中的
NaN
s的数量与
B
的大小不匹配。在这里使用
逻辑索引
更好更快-只需省略
find