在MATLAB中矢量化for循环

AJM*_*JMA 3 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
Run Code Online (Sandbox Code Playgroud)

但是,如何通过矢量化在单行中实现相同的结果?就arrayfun在这个问题有用吗?

ray*_*ica 5

bsxfun在这种情况下使用:

B = bsxfun(@rdivide, 100 * A, A(:, 1)) - 100;
Run Code Online (Sandbox Code Playgroud)

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

使用MATLAB R2016b,没有必要bsxfun,您可以使用算术运算进行本机操作:

B = (100 * A) ./ A(:,1) - 100;
Run Code Online (Sandbox Code Playgroud)