我目前正在处理一个相当困难的排序问题。
我有一个数月表示。让我们假设数组看起来像这样:
mth = [3;4;5;6;7;8;9;10;11;12;1;2;3;4;5;6]
我想对上面提到的那样进行排序:
mth = [1;2;3;4;5;6;7;8;9;10;11;12]
其余部分应出现在另一个数组中:
mthDiscard =[3;4;5;6]
现在假设我们超过2年,那么我希望排序看起来像这样:
mth = [3;4;5;6;7;8;9;10;11;12;1;2;3;4;5;6;7;8;9;10;11;12;1;2;3;4;5;6]
这样:
mth = [1;2;3;4;5;6;7;8;9;10;11;12;1;2;3;4;5;6;7;8;9;10;11;12]
mthDiscard = [3;4;5;6]
我怎样才能实现这种排序?
更多信息:
我需要提到的是,我每个月都有一个带消费值的向量。我希望实现这一点,以便我每个月定期消费价值!因此,如果我有13个月的数据,我会丢弃一个月。
答案 0 :(得分:0)
一种简单的方法是查看每月存在的次数。只有一两个这样的值,比如m
和m+1
。显示超过m
次的月份(如果有)将被丢弃。最终结果是1:12
重复m
次。
n = histc(mth,1:12); %// number of times each month is present
m = min(n);
mthDiscard = find(n>m); %// these are discarded as they don't fill a whole year
mth = repmat(1:12,1,m).'; %'// final result
答案 1 :(得分:0)
如果我正确地理解了您“丢弃”月份的标准,我认为您只是采用12 * k月份的最长序列,如:
idx = fix(numel(mth)/12)*12;
mth_kept = mth(1:idx)
mth_discarded = mth(idx+1:end)
然后,如果您希望序列始终从1开始,我们可以执行循环移位:
circshift(mth_kept, mth(1)-1)
(假设月份总是按顺序排序,并且两者之间没有错过的月份。)