在MATLAB中矢量化for循环

时间:2017-04-25 16:23:18

标签: matlab for-loop vectorization

在MATLAB中,给定矩阵A,我想创建一个矩阵B,其中包含矩阵A的元素,占第一列元素的百分比。以下代码执行此操作:

A = randi(5,6);

B = zeros(size(A,1), size(A,2));
for kk = 1:size(A,2)
    B(:,kk) = (A(:,kk).*100)./ A(:,1)-100;
end

但是,如何通过矢量化在单行中实现相同的结果? arrayfun会对此事有用吗?

1 个答案:

答案 0 :(得分:5)

在这种情况下使用bsxfun

B = bsxfun(@rdivide, 100 * A, A(:, 1)) - 100;

您的代码正在做的是获取矩阵A的每一列并除以其第一列。您正在进行一些额外的缩放,例如在分割之前将所有列乘以100,然后再减去。 bsxfun在内部执行广播,这意味着它将临时创建一个新矩阵,该列表与A中的列数重复第一列,并执行逐元素划分。您可以通过将矩阵预缩放100,然后在之后减去100来完成逻辑。

使用MATLAB R2016b,不需要bsxfun,您可以使用算术运算本地执行此操作:

B = (100 * A) ./ A(:,1) - 100;