gpt4 book ai didi

matlab - 将向量分成预定义大小的组

转载 作者:行者123 更新时间:2023-12-03 19:40:38 25 4
gpt4 key购买 nike

我正在寻找一种方法将输入向量分成预定义大小的组,如果有余数,则最后一组较小。我更喜欢将输出作为一个单元格,但我不介意它是否是任何其他类,只要它使用后续索引提供对子组的访问。
以下是预期行为的示例:

% Even split
v = 1:6;
grpSz = 2;
% OUT: {[1,2], [3,4], [5,6]}

% Remainder
v = 1:5;
grpSz = 3;
% OUT: {[1,2,3], [4,5]}

% Single group
v = 1:5;
grpSz = 6;
% OUT: {[1,2,3,4,5]}
以下是一些有用的数量:
  • 输出中的组数:nG = ceil(numel(v)/grpSz)
  • 最后一组中的元素数:r = mod(numel(v), grpSz)

  • 目前我正在使用 mat2cell :
    function out = evenSplitter(v, grpSz)
    nV = numel(v);
    nG = ceil(nV/grpSz);
    r = mod(nV, grpSz);
    out = mat2cell(v, 1, [repmat(grpSz, 1, nG-1), ~r*grpSz+r]);
    ...这有效,但看起来有点笨重。有人会建议更优雅的解决方案吗?

    最佳答案

    使用 splitapply 的一种解决方案:

    v     = 1:5;                                           % input array
    grpSz = 2; % maximal group size
    out = splitapply(@(x){x},v,ceil((1:numel(v))/grpSz)) % split v
    此方法适用于所有给定的示例。 splitapply将数据分组并应用函数。匿名函数 @(x){x}只需将组的每个元素放入一个单元格中。和 ceil((1:numel(v))/grpSz)创建一个数组,指示哪些元素与哪些组相关联。
    例如,如果 v = 1:5grpSz = 2 , ceil((1:numel(v))/grpSz)产生以下数组 [1 1 2 2 3] .

    关于matlab - 将向量分成预定义大小的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65319549/

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