matlab - 在 MATLAB 中向量化 for 循环

标签 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 在这件事上有用吗?

最佳答案

使用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/

相关文章:

matlab - 逐像素比较图像

for循环内的计数器没有给出预期的输出

php - 为什么在 for 循环的条件下调用函数不好?

r - 对具有后向依赖性的 R 循环进行向量化

c++ - Xeon phi 卸载模式如何利用线程并行性和矢量化

c++ - 绘制我的 C++ 代码的中间结果的最佳工具是什么?

regex - 在 .m 文件的开头查找特定字符

c++ - 在 Windows 上为 Matlab 构建 libspline - 对重载函数 'pow' 的不明确调用

java - 用数字打印倒三角形 - Java

python - 使用两个数据框进行 Pandas 矢量化