在MATLAB中使用多个条件更新矩阵值

时间:2017-02-28 19:22:06

标签: matlab function

我有pp:

x = [1 2 5; 1 3 nan; 1 3 4]

我尝试编写一个函数,用多个条件更新pp(1:n,3)中的值:

如果x(p,3)是NaN,AND pp(p,2)是3并且x(p-1,1)与x(p,1)相同,

然后设置x(p,3)= x(p-1,3)。

基本上我想将第三列中的nan值设置为上一行中的值,如果前一列中的值为3且第一列中的值与前一行相同。

我的代码:

function x = Updatevalue(x)
[rows]=size(x, 1); 
for p=2:rows
    if (isnan(x(x(p,3)))) && (x(x(p,2) == 3)) && (x(x(p,1)) == x(x(p-1,1))) 
       x(x(p,3)) = x(x(p-1,3)); 
    end
end 

这给了我错误:

下标索引必须是实数正整数或逻辑。

Error in Updatevalue (line 4)
if (isnan(x(x(p,3)))) && (x(x(p,2) == 3)) && (x(x(p,1)) == x(x(p-1,1))) 

当我改变&&和我时,我得到同样的错误到&amp ;.我仍然是MATLAB的新手,谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

因为p=1 x(p-1,1)不存在。只需将for循环更改为从2开始,因为p==1无论如何都不会发生这种情况。

答案 1 :(得分:0)

也许试试这个,你的isnan(x(x(p,3)))x(x(p,3))=都错了。如果x(p,3)NaN,则您尝试x(NaN)

[rows]=size(x, 1); 
for p=2:rows
    if (isnan(x(p,3))) && (x(p,2) == 3) && (x(p,1) == x(p-1,1)) 
      x(p,3) = x(p-1,3); 
    end
end