在 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
在这件事上有用吗?
最佳答案
使用bsxfun
在这种情况下:
B = bsxfun(@rdivide, 100 * A, A(:, 1)) - 100;
您的代码所做的是获取矩阵 A
的每一列并除以它的第一列。您正在进行一些额外的缩放,例如在除法之前将所有列乘以 100,然后在除法之后减去。 bsxfun
在内部执行广播,这意味着它将临时创建一个新矩阵,将第一列复制到与 A
中一样多的列,并执行逐元素除法。您可以通过将矩阵预先缩放 100,然后再减去 100 来完成您的逻辑。
使用 MATLAB R2016b,不需要 bsxfun
,您可以使用算术运算在本地完成:
B = (100 * A) ./ A(:,1) - 100;
关于matlab - 在 MATLAB 中向量化 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43616111/