【发布时间】:2015-11-17 09:14:25
【问题描述】:
所以,我正在为我在 MATLAB 中构建的实验编写代码的两个相关问题。首先,我有一个 20 行的列向量,称为 block1(在 20 个插槽中的每个插槽中都有一个数字)。
我想从向量中随机抽取一个数字而不进行替换,然后重复此操作,直到向量中没有数字(总共 20 次)。我在 for 循环中有以下行(设置为运行 20 次迭代),它从向量中提取随机数并将其设置为等于变量 rand_num:
rand_num = randsample(block1,1,false)
抽随机数就好了,但问题是没有替换部分的抽奖是行不通的。最初我认为这是因为向量在 for 循环的每次迭代开始时被重置。为了确保,我调试并发现即使在第一次迭代完成之前(以及在绘制随机数之后)停止 for 循环,向量中仍然有 20 个数字(应该有 19 个)。关于如何解决此问题的任何想法?
第二个问题如下。对于同一个实验,我有一个名为pick_matrix 的 20 x 6 矩阵。在与上述相同的 for 循环的每次迭代中,我想从矩阵中随机选择一行(包括该行中的每个元素;因此每行总共 6 个元素)而不进行替换,并将该行分配给变量random_row。
我想出了随机选择一行并将其分配给 random_row 的代码,但我遇到了与上一个问题相同的问题:没有替换的部分不起作用。
【问题讨论】:
-
不提供代码是无法回答的。一般来说,我认为你不需要
for循环(你很少在 Matlab 中这样做)。看看randperm。 -
randperm 运行良好,谢谢。
标签: matlab for-loop matrix random vector