随机选择从n n个元素数组

6视图(30天)
我需要随机选择50 50列表来建立一个新的数组的元素,每个列表包含100个元素,那么应用一些帖子分类处理所有可能的新数组的索引所有50个最好的数组元素。
问题是会有 可能性的新数组的组合。如何在MATLAB实现这项工作吗? 我们可以尝试Mapreduce吗?
这个问题感觉我有50类,每个类有100名学生,和我需要找到“最佳”的团队与50名学生从50类。每个学生都有一个独特的分数/团队的贡献,所以我扫描所有可能的团队和他们找到我想要的以及每个类的学生ID。
1评论
冯程
冯程 2021年8月4日
编辑:冯程 2021年8月4日
排序函数是复杂但容易计算,只关心两个参数:学生成绩和类索引。
我不需要存储在内存中所有可能的解决方案。万博 尤文图斯我做了一种Mapreduce测试巨大num或者说100 gb存储在文本文件,和这个测试并不符合传统的内存计算。对我而言,我认为这是samilar但我不知道如何处理更大的组合。我知道这num超出计算。这是一个极端的例子。我可以简化成一个少num问题,例如, ,这可能是总19 gb数据大小。然后回到同样的问题。
我可以设置8嵌套循环将所有组合索引保存到多个文件到磁盘和Mapreduce应用到解决问题,虽然感觉很愚蠢。
但是很难扩展工作流为大数据计算太大了,就像我所提到的 。我想可能会有一些方法来摆脱这个巨大的数字。这就是为什么我来这里找到一些更好的工具。我没有diea有关 最优停止策略 但是我可以检查它。
我很抱歉浪费你这么多能量。让我们停止在这里。

登录置评。

接受的答案

图像分析
图像分析 2021年8月4日
后,我相信他们会是什么 应该 更著名的) “最优停止战略” 或“37%规则”。他们可能已经讨论了你的课程。基本上说,它说你检查第一个37%的可能性没有选择其中任何一个。然后你开始复习的可能性,你遇到的第一个规则 更好的 他们比你见过的最好的选择。如果你做,那么你有37%的可能性选择最优的可能性。
很奇怪,对吧?然而实际上有一些理论。
这是一个网页有更多的信息,包括一个表和更复杂的扭曲问题。
然而,即使是37%的100 ^ 50太大,但是如果你没有一些特殊的策略,Wikpedia有一些你可以试试: https://en.wikipedia.org/wiki/Optimal_stopping

更多的答案(4)

图像分析
图像分析 2021年8月4日
你怎么图100 ^ 50 ?你有50 100个元素的列表,你应该选择随机一半的元素。所以你会有50输出向量。您可以使用randperm ()
为一个向量,我们叫它vec1,你能做的
randomIndexes = randperm(长度(vec1), 50);%得到50个随机指标。
%现在提取这些vec1Output:
vec1Output = vec1 (randomIndexes);
%应用“分类处理”:
vec1Output =排序(vec1Output,“提升”);%或任何你想做的事。
在那里,这样做也通过vec50 vec2和你会有50个输出向量。
7评论
Peter O
Peter O 2021年8月4日
@Feng程 你能给我们一点信息的排序功能需要实现基本列表参数是什么?他们是学生成绩或他们实际上只是一个大参数网格吗?
作为 @Walter罗伯森 提出,这是听起来更像是一个优化问题,而不是一个分类问题,和DP看起来像一个好的候选人。如果成本函数不能通过动态规划方法解决那一个随机优化器(遗传算法、粒子群模拟退火,微分进化)也可能是适合的任务。在这两种情况下的算法解决寻找“最好”的解决方案,而不需要在内存中保持整个可能的解决方案空间。

登录置评。


Chunru
Chunru 2021年8月4日
编辑:Chunru 2021年8月4日
nele = 100;nlist = 50;
data = randn (nele nlist);%的数据列表
idx =兰迪([1 nele] 1 nlist);%为每个列表行索引
idx = (0: nele: nele * nlist-1) + idx;%线性指数
x =数据(idx);%数据选择
7评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年8月4日
可观测宇宙的质量显然是大约10 ^ 53公斤。

登录置评。


Peter O
Peter O 2021年8月4日
一些编程和for循环可以处理所有可能的组合。
如果你希望能够画重复元素的列表(比如新列表可以包括指数10多次),使用 兰迪 。否则,使用 randperm
%生成一些假的列表作为一个单独的数组,每个有100个条目。
n_lists = 50;
n_entries = 100;
列表=兰德(100年,n_lists);
n_pick = 50;
%我们知道画的大小。Preallocate。
NewLists = 0 (n_pick n_lists);
%生成随机指数画。
第九= 1:n_lists
指数= randperm(大小(列表,1),n_pick);
%或如果你想允许重复:
%指数=兰迪(大小(列表,1)、n_pick 1);
NewLists (1: n_pick, ix) =列表(索引、ix);
结束
%这里需排序。因为这里的列表命令作为一个单独的矩阵
%可以通过单个调用来处理它。那种叫做没有其他
%的争论将单个列排序
NewLists_sorted =排序(NewLists)
NewLists_sorted = 3×5
0.5339 0.0871 0.2878 0.4678 0.2783 0.5875 0.4006 0.3817 0.5071 0.8016 0.7901 0.7552 0.9092 0.9484 0.8142
3评论
Peter O
Peter O 2021年8月4日
是的, @Chunru ,我同意。上面的解决方案是为一个不同的问题,我们几个人认为OP是试图解决。OP更新问题,帮助我们更好地理解他们正试图做什么。

登录置评。


沃尔特·罗伯森
沃尔特·罗伯森 2021年8月4日
编辑:沃尔特·罗伯森 2021年8月4日
列表= arrayfun (@ (idx)兰迪(99、1100),1:50,“统一”,0);
one_random_selection = cellfun (@ (L) L(兰迪(100)),列表)
one_random_selection = 1×50
16 51 65 2 32 74 79 48 82 58 14 42 17 5 8 32 19 33 99 32 64 58 35 96 60 72 73 30 27
排序(one_random_selection)
ans = 1×50
2 3 5 5 6 8 12 14 16 17日19日19日21日27日28日30 32 32 32 33 35 37 37 42 43 46 47 48 51 51
如果你想找到 所有 独特的排序()的,这将是一个完全不同的问题。
7评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年8月4日
你是错误的。我提供的链接代码,可以产生每一个组合的数组,而没有其他的人给你。你跑我提供的初始化例程,然后我提供的循环运行。每一次,返回下一个组合;你根据你的评分系统评价相结合,如果是到目前为止最好的组合,你记录。你一直循环,直到代码可用说没有更多的可能性;在这一点上,你返回的最佳值。
我可以设置8嵌套循环将所有组合索引保存到多个文件到磁盘和Mapreduce应用到解决问题,虽然感觉很愚蠢。
我的代码提供了一种机制有一个for循环,计算每一种可能性。
但是很难扩展工作流计算更大的数据太大了
我的代码扩展到任何数据集本身只需要不到大约1/4的可用内存。5000件(50类100名学生)为我的代码,不是一个问题 给足够的时间
Mapreduce
使用mapreduce意味着你想评估 所有 的可能性。我的代码评估所有可能性 给足够的时间
如果mapreduce甚至在你的精神工具箱概念上解决这个问题,那么我的代码应该是一个严重的竞争者。
像这样的问题,有两种可能性:
  1. 结果从一个组合不能使用从其他组合,对结果进行预测所有需要尝试组合;在这种情况下,我的代码可以为mapreduce处理问题太大给足够的时间;或
  2. 结果从一个组合可以被用来预测结果与其他组合;在这种情况下,mapreduce通常不是一个有用的策略,但技术,如动态规划可能会非常有效
你也要问你是否需要 最好的 组合,或者仅仅是一个“不错”的组合。举个例子,这将是完全合理的,问“如果我把10 ^ 9组合评估的限制(保持计算时间有限),那么我应该使用技术的最佳组合我容易吗?”。和 通常 mapreduce()使用的不是一个技术的最佳组合在一个预算。

登录置评。

类别

找到更多的在创建和连接矩阵帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!