Matlab:将数据块随机划分为大小相等的集合
我有一个大型数据集,需要将其随机分为 5 个几乎相等大小的集合以进行交叉验证。我之前很高兴使用 _crossvalind_
来划分集合,但是这次我需要一次将数据块划分为这些组。
假设我的数据如下所示:
data = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18];
然后我想将它们随机分成 5 组,每组 2 块,例如像这样
g1 = [3 4], [11 12]
g2 = [9 10]
g3 = [1 2], [15 16]
g4 = [7 8], [17 18]
g5 = [5 6], [13 14]
我认为我可以使用一些 for 循环来做到这一点,但我猜肯定会有更多的成本- 在 matlab 中执行此操作的有效方法:-)
有什么建议吗?
I have a large dataset that I need to divide randomly into 5 almost equal sized sets for cross validation. I have happily used _crossvalind_
to divide into sets before, however this time I need to divide chunks of data into these groups at a time.
Let's say my data looks like this:
data = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18];
Then I want to divide them randomly into 5 groups in chunks of 2, e.g. like this
g1 = [3 4], [11 12]
g2 = [9 10]
g3 = [1 2], [15 16]
g4 = [7 8], [17 18]
g5 = [5 6], [13 14]
I think I can do this with some for-loops, but I'm guessing there must be a much more cost-efficient way to do it in matlab :-)
Any suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我将您的需求解释为集合的随机排序,但在每个集合中,元素的顺序与父集合相同。您可以使用 randperm 随机排序集合的数量并对元素使用线性索引。
g
的不同行为您提供不同的分组。I'm interpreting your needs to be random ordering of sets, but within each set, the ordering of elements is unchanged from the parent set. You can use
randperm
to randomly order the number of sets and use linear indexing for the elements.The different rows of
g
give you the different groupings.您可以对数组 (randperm) 进行打乱,然后将其分成连续的相等部分。
You can shuffle the array (randperm) and then divide it into consequentive equal parts.