matlab - 需要使用 if 语句来乘以向量 : vectorisation

标签 matlab

我有一个向量

V=[ 1 2 3 5 9];

并且想像这样相乘:

newVect=zeros(1,length(V));

for i=1:length(V)

    if V(i)==1
       newVect(i)=V(i)*somevaluex
    elseif V(i)==5
       newVect(i)=V(i)*somevaluey
    else
       newVect(i)=V(i);
end

这看起来很麻烦,因为我实际上正在处理具有 10000 个元素的数组。这可以以某种方式被矢量化取代吗?

最佳答案

你可以这样做:

newVect = V .* (   someValuex.*(V==1) +  someValuey.*(V==5) + V.*( (V~=1) & (V~=5) ) )

或者更快一点:

newVect=V;
newVect(V==1)=V(V==1)*someValuex;
newVect(V==5)=V(V==5)*someValuey;

关于matlab - 需要使用 if 语句来乘以向量 : vectorisation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12737189/

相关文章:

arrays - MATLAB中没有for循环的多个数组的交集

matlab - 已编译的matlab中的调用堆栈

matlab - 如何检查一个向量是否是另一个向量的子集?

Matlab:在函数/脚本中运行给定目录中的所有函数

algorithm - 找到范围内的所有点到另一组的任何点

matlab - 使用外部浏览器查看matlab帮助页面

image - Matlab - 创建不同大小的子图的图形

matlab - 使用带有隐式函数的 ezplot 时出现问题

c++ - Matlab中的USRPs并行控制

python - 与 MATLAB 相比,改进 Numpy 中复杂矩阵元素求和的更好方法