我有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的新手,谢谢你的帮助!
答案 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