作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在不使用 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} 索引
。如果这是一个问题,我相信您可以解决它...
另请注意,您的代码生成的随机数介于 0
和 50
之间,但您的“有效分箱”仅介于 10
和 50
(因为你如何编写你的算法)。因此收集的指数总和将略少于 50(平均 40)。
关于matlab - 如何在 Matlab 中矢量化此代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15301886/
我是一名优秀的程序员,十分优秀!