performance - 矩阵预分配 - MATLAB

标签 performance matlab

我有以下代码:

clear; clc;

a = [1,2,3,4,3];

b = zeros(1,5);
for i = 1:4
    for j = i+1:5
        if a(i) == a(j)
            b = [b,i];
        end
    end
end
b

b 是一个数组,由双 for 循环内的元素串联而成。即使我声明了数组 b = Zeros(1,5)MATLAB 仍警告我需要预先分配 b。我应该如何修改代码,以便 MATLAB 停止警告我进行预分配?

最佳答案

问题是连接步骤b = [b, i]会将追加 ib,所以您只需将数字放在零矩阵之后即可。您想要的是分配给 b 的特定元素,例如 b(???)=i,该 ??? 需要去为了最简单的是保留一个单独的计数器变量。

clear; clc;

a = [1,2,3,4,3];

b = zeros(1,5);
counter = 1;
for i = 1:4
    for j = i+1:5
        if a(i) == a(j)
            b(counter) = i;
            counter = counter + 1;
        end
    end
end

b

请注意,在此示例中您需要过度分配 b 因为您实际上并不预先知道它最终会有多少元素,如果您的示例确实如此简单,那么我在这种情况下可能会忽略警告,除非您发现代码很慢

关于performance - 矩阵预分配 - MATLAB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30527527/

相关文章:

c# - 如何缩短 Asp.net Web 应用程序调试时间?

c# - 提高长时间操作的性能

matlab - 强制 MATLAB 重新加载在 mex 函数中链接的库

matlab - imagesc 中 NaN 的对比色

matlab - 在非正方形区域填充 NaN

performance - 效率:递归与循环

mysql - varchar 和 int 列上的多重索引。但必须是全文

javascript - 有没有办法减少 ExtJS 的冗长

运行 MATLAB 的 Bash 脚本错误

matlab - 查找黑色方 block 的 x 和 y 坐标 - Matlab