假设我有一个函数 calculateStuff(x),它以标量作为参数并返回标量。
假设我有一个向量 X,我想在 X 的每个组件上应用 calculateStuff,并获得一个结果向量并将其存储在一个新向量 Y 中。
很明显,Y=calculateStuff(X) 是不合法的,除了循环外,我是否有其他方法可以实现这一点?
假设我有一个函数 calculateStuff(x),它以标量作为参数并返回标量。
假设我有一个向量 X,我想在 X 的每个组件上应用 calculateStuff,并获得一个结果向量并将其存储在一个新向量 Y 中。
很明显,Y=calculateStuff(X) 是不合法的,除了循环外,我是否有其他方法可以实现这一点?
你有三个选项:
calculateStuff
函数,使其能够处理数组并返回数组。arrayfun
函数隐藏循环: Y = arrayfun(@calculateStuff,X)
大多数Matlab操作都可以让您输入矩阵并返回矩阵。 您应该能够重新编写calculateStuff()以接受矩阵并返回矩阵。 通常,这比使用 for 循环要快得多。 在Matlab中,循环的时间成本非常高。
您需要查看的内容是正常操作的“点”版本。 例如,不是
y = z * x;
y = z .* x;
第一个将执行矩阵乘法,这可能不是您向量化代码时想要的。第二个对z和x进行逐元素相乘。
请参见此处并搜索“点操作”。
map
吗? - user395760