gpt4 book ai didi

matlab - 这个 MATLAB 循环是否有更优雅的替代品?

转载 作者:太空宇宙 更新时间:2023-11-03 19:51:54 28 4
gpt4 key购买 nike

我想在 MATLAB 中更好地矢量化我的循环。目前,我正在尝试计算整数列表中值的出现次数。我的代码与此类似:

list = [1 2 2 3 1 3 2 2 2 1 5];
occurrence_list = zeros(1,max(list));

for x=list
occurrence_list(x) = occurrence_list(x) + 1;
end

是否有一个简单的矢量化替代 for 循环? (或者是否有我缺少的内置 MATLAB 函数?)我在非常小的数据集上执行此操作,所以时间不是问题。我只是想改进我的 MATLAB 编码风格。

最佳答案

除了 HIST/HISTC 函数外,您还可以使用 ACCUMARRAY 来计算出现次数(以及许多其他聚合操作)

counts = accumarray(list(:), 1)
%# same as: accumarray(list(:), ones(size(list(:))), [], @sum)

另一种方法是使用统计工具箱中的 TABULATE(返回值、计数、频率):

t = tabulate(list)
t =
1 3 27.273
2 5 45.455
3 2 18.182
4 0 0
5 1 9.0909

请注意,如果值不是从 1m 开始,或者如果最小值和最大值之间存在较大差距,您将在计数之间得到很多零。而是使用:

list = [3 11 12 12 13 11 13 12 12 12 11 15];
v = unique(list);
table = [v ; histc(list,v)]'

table =
3 1
11 3
12 5
13 2
15 1

表示唯一值及其计数(这只会列出至少出现一次的值)

关于matlab - 这个 MATLAB 循环是否有更优雅的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3427291/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com