Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab。if/else if/else语句中的矢量化_Matlab_If Statement_Vectorization - Fatal编程技术网

matlab。if/else if/else语句中的矢量化

matlab。if/else if/else语句中的矢量化,matlab,if-statement,vectorization,Matlab,If Statement,Vectorization,我需要以下代码的帮助: if x(:,3)>x(:,4) output=[x(:,1)-x(:,2)]; elseif x(:,3)<x(:,4) output=[x(:,2)-x(:,1)]; else output=NaN end 我不知道如何使代码工作。它只接受第一个参数,忽略else if和else参数。请帮忙。谢谢。如果x(:,3)>x(:,4)真的不起作用,如果希望为true或为false不是向量。因此它只计算向量x(:,3)>x(:,4)的第一个元素,这就是为什么它似

我需要以下代码的帮助:

if x(:,3)>x(:,4)
output=[x(:,1)-x(:,2)];
elseif x(:,3)<x(:,4)
output=[x(:,2)-x(:,1)];
else
output=NaN
end
我不知道如何使代码工作。它只接受第一个参数,忽略else if和else参数。请帮忙。谢谢。

如果x(:,3)>x(:,4)
真的不起作用,
如果
希望
为true
为false
不是向量。因此它只计算向量
x(:,3)>x(:,4)
的第一个元素,这就是为什么它似乎忽略了您的
elseif

因此,您必须使用循环,或者更好地使用如下逻辑索引:

x= [10   5   1   2        
10   5   2   1        
NaN  1   1   3]

output = NaN(size(x,1),1)
I = x(:,3)>x(:,4);
output(I) = x(I,1)-x(I,2);
I = x(:,3)<x(:,4);
output(I) = x(I,2)-x(I,1)
x=[10 5 1 2
10   5   2   1        
南1 1 3]
输出=NaN(大小(x,1),1)
I=x(:,3)>x(:,4);
输出(I)=x(I,1)-x(I,2);

I=x(:,3)以下是您的操作方法:

output = NaN(size(x,1),1);

idx1 = x(:,3)>x(:,4);
idx2 = x(:,3)<x(:,4);

output(idx1) = x(idx1,1)-x(idx1,2);
output(idx2) = x(idx2,2)-x(idx2,1);
output=NaN(大小(x,1),1);
idx1=x(:,3)>x(:,4);

idx2=x(:,3)使用
符号
避免针对不同条件编制索引

B=diff(x,1,2);
B(B(:,3)==0,3) = NaN;
output = B(:,1) .* sign(B(:,3));
或以较短且可读性较差的形式:

B=diff(x,1,2);
output = B(:,1) .* (sign(B(:,3))+0./sign(B(:,3)));

确保检查
if
语句:
if。。。如果。。。其他的end
(在
else
if
之间没有空格)我更改了它,但没有解决问题请注意,如果最后两列相等,您的输出也将是
NaN
。如果这是不可取的,请使用
=
而不是
,或者为这种可能性添加另一个索引。我猜这是对我想法的有力证实!谢谢你的意见。我希望我可以一起避免为我的所有项目编制索引:)
B=diff(x,1,2);
output = B(:,1) .* (sign(B(:,3))+0./sign(B(:,3)));