gpt4 book ai didi

matlab - 如何在 Matlab 中矢量化此代码?

转载 作者:行者123 更新时间:2023-12-02 22:11:03 25 4
gpt4 key购买 nike

如何在不使用 for 循环的情况下实现此 Matlab 代码?

b=10:10:50
a=50*rand(1,50);

for ii=2:numel(b)
ind{ii}=find(a<b(ii) & a>b(ii-1));
end

最佳答案

看起来您正在绘制直方图并跟踪哪个元素最终位于哪个 bin 中。这意味着您可以通过以下几行“几乎”获得您想要的内容:

a = 50 * rand(1, 50);
b = 10:10:50;
[h c] = histc(a, b);

现在c包含了a中每个元素的“bin”的索引。例如如果

a = [15 22 9 7 25];

然后

c = [1 2 0 0 2];

不确定将这些收集到元胞数组中的值(value) - 在我看来,无论您想对 ind 中的值做什么,都可以使用 c 来完成。

我怀疑使用“矢量”操作(这意味着具有相同长度的东西)创建元胞数组(可能具有不同的长度)可能很困难...有兴趣看到有人提出反例!

编辑:我发现了我自己的反例...下面一行生成了一个单元格数组 ind 就像你的代码所做的那样(arrayfun 命令确实有一个隐含的 for 循环但被认为是“矢量化的”)。

ind = arrayfun(@(x)find(x==c),1:numel(b)-1, 'uniformoutput', false);

请注意,完成此操作后,单元格数组 ind 具有从单元格 ind{1} 开始的值,而您的原始代码从单元格 ind{2} 索引。如果这是一个问题,我相信您可以解决它...

另请注意,您的代码生成的随机数介于 050 之间,但您的“有效分箱”仅介于 1050(因为你如何编写你的算法)。因此收集的指数总和将略少于 50(平均 40)。

关于matlab - 如何在 Matlab 中矢量化此代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15301886/

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