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

标签 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

这是一个示例数据:

matrix x              output
10   5   1   2        -5
10   5   2   1         5     
NaN  1   1   3         NaN

我不确定如何使代码工作。它只接受第一个参数并忽略 else if 和 else 参数。请帮忙。谢谢。

最佳答案

if x(:,3)>x(:,4) 没有真正起作用,if 期望 truefalse 不是向量。所以它只计算向量 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)

关于matlab. if/else if/else 语句中的矢量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18741764/

相关文章:

c - 在函数中使用 scanf 和循环

python - 将滑动窗口设置为多维数组中的列(来自 MATLAB 的 IM2COL) - Python

python - 无法进行矢量化时如何优化 pandas 数据帧的迭代

c++ - 对宽寄存器(特别是 Xeon Phi)进行未对齐数据访问的矢量化/优化循环

matlab - 在 MATLAB 中将两个非常大的稀疏矩阵相乘时出现内存不足错误

matlab - 二维矩阵中各列的最小-最大归一化

arrays - 通过水平切片 reshape 数组(Matlab)

matlab - 我可以阻止 Matlab 动态调整预分配数组的大小吗?

r - 如果 y 在同一列中至少出现一次,如何删除 x 的整行?

javascript - 如果不使用新的 if 语句,我将如何比较特定值?