【问题标题】:Binning 1:9 -> bin of equal number cell array分箱 1:9 -> 等号元胞数组的分箱
【发布时间】:2018-07-12 15:00:05
【问题描述】:

以下简单问题:我想将一个向量放入一个单元格数组groups大小相等

我在解决问题时遇到了麻烦,我强烈地感觉自己可能会成为一名单行者,以下是我所取得的成就:

nums=1:9; %numbers to bin
categories=discretize(nums,3); %put nums in 3 equal groups
groups=mat2cell(x); % should return: {1:3,4:6,7:9}

我错过了什么?

该解决方案应该适用于任何包含数字的一维向量,尽可能将其分箱到大小相等的箱中(任何解决方案都有效);输出应该是各个 bin 的元胞数组。

【问题讨论】:

  • bin 是使用原始顺序的数字构建的,还是按照它们的值的递增顺序构建的?如果 bin 大小不除元素数,输出应该是什么?
  • categories=discretize(nums,3); 分配给nums 元素的类别是{1:2,3:5,6:9},而不是{1:3,4:6,7:9}。您的预期结果是什么?
  • @Will 你是对的。预期的结果是可能具有相同大小的箱(具有灵活的箱大小)。使用离散化是谷歌搜索并从文档中读取[Y,E] = discretize(X,N) divides the range of X into N uniform bins, and also returns the bin edges E. 的结果,意外结果,道歉
  • @LuisMendo 顺序无关紧要,我猜输出大小可能会关闭,即说 10 -> bins of 3 -> 3,3,4 bins

标签: matlab bin binning


【解决方案1】:

您可以使用reshapenum2cell

result = num2cell(reshape(1:9,3,[]),1);

如果数组大小不能被 bin 数整除,您可以使用 histcountsmat2cell

nbins = 3;
a= [2 3 1 8 7 6 9 8 1];
result = mat2cell(a,1,histcounts(1:numel(a),nbins));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-08
    • 2020-01-31
    • 2020-05-22
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2018-04-15
    • 2013-06-19
    相关资源
    最近更新 更多