我在if语句中遇到未定义函数或变量的错误(最后一行之前的最后一行),当我已经指定了等号时。
l_min = nan(372,1);
A = randn(372,3);
B= randn(372,3);
for t=1:372
min_ct = min( A(t,:));
if min_ct == A(t,1);
l = B(t,1);
if min_ct == A(t,2);
l = B(t,2);
elseif min_ct == A(t,3);
l = B(t,3);
end
end
l_min(t) = l;
end
有人可以帮忙解决这个问题吗?
答案 0 :(得分:1)
您的if
逻辑存在缺陷,应该是
min_ct = min(A(t,:));
if min_ct == A(t,1);
l = B(t,1);
elseif min_ct == A(t,2); % <-- Note thise is an *else*if
l = B(t,2);
elseif min_ct == A(t,3);
l = B(t,3);
end
你的奇怪的半缩进可能会混淆你的逻辑流程。
注意:在双打上使用==
也很容易给你unexpected results,所以你应该考虑使用更好的方法。特别是,min
函数的第二个输出被设计为完全符合您的要求!
使用以下内容替换if
阶梯:
for t=1:372
[~, min_idx] = min(A(t,:));
l_min(t) = B(t, min_idx);
end
答案 1 :(得分:0)
即使没有使用矢量化的for
循环,您也可以完成任务。
这是通过使用min
函数的索引输出并指定您希望确定最小值的方向来完成的。只需将for循环中的所有内容替换为:
[~, ind] = min(A,[],2); % Determine minimum locations
bindex = sub2ind(size(B),1:size(B,1),ind') % Convert the subscripts to indices
l_min = B(bindex)';