假设我有一个函数calculateStuff(x),它接受一个标量作为参数并返回一个标量。
假设我有一个向量X,我想对X中的每个组件应用calculateStuff,并获得结果的向量并将其存储在新的向量Y中。
显然Y = calculateStuff(X)是非法的,除了循环之外,还有什么方法可以做到这一点?
答案 0 :(得分:16)
您有三种选择:
calculateStuff
以便它可以使用数组并返回数组arrayfun
隐藏循环:Y = arrayfun(@calculateStuff,X)
答案 1 :(得分:9)
大多数Matlab操作都允许您输入矩阵并返回矩阵。您应该能够重写calculateStuff()以获取矩阵并返回矩阵。这通常比使用 for 循环快得多。 Matlab中的循环在时间上非常昂贵。
您需要注意的一些事情是正常操作的“点”版本。例如,而不是
y = z * x;
DO
y = z .* x;
第一个将进行矩阵乘法,这可能不是你想要的矢量化代码。第二个是逐个元素乘以 z 和 x 。
请参阅here并搜索“点操作”。