(MATLAB)从矩阵中随机地从矢量和行中随机绘制元素而不替换for循环

时间:2015-08-24 03:11:51

标签: matlab for-loop matrix random vector

因此,我正在为MATLAB中构建的实验编写代码的两个相关问题。首先,我有一个20行的列向量,称为block1(在20个插槽的每一个中都有一个数字)。

我想从矢量中随机抽取一个数字而不进行替换,并重复此操作,直到矢量中没有数字(总共20次)。我在for循环中设置了以下行(设置为运行20次迭代),它从向量中提取随机数并将其设置为等于变量rand_num:

rand_num = randsample(block1,1,false)

它可以很好地绘制随机数,但问题是没有替换部分的绘制不起作用。最初我认为这是因为向量在for循环的每次迭代开始时被重置。为了确保,我调试并发现即使在第一次迭代完成之前停止for循环(并且在绘制了随机数之后),向量中仍然有20个数字(当应该有19个时)。关于如何解决这个问题的任何想法?

第二个问题如下。对于同一个实验,我有一个名为pick_matrix的20乘6矩阵。在上述相同for循环的每次迭代期间,我想从矩阵中随机选取一行(包括该行中的每个元素;因此每行共有6个元素)而不进行替换,并将该行分配给变量{{1} }。

我想出了随机选择一行并将其分配给random_row的代码,但我遇到了与上一个问题相同的问题:无替换部分无效。

1 个答案:

答案 0 :(得分:1)

randsample工作正常,完全符合预期。你只需要在循环之前调用一次,而不是在循环中调用二十次。仔细阅读帮助 - randsample不会改变输入变量block1的任何内容。一般来说(忽略全局等),输入变量由Matlab函数改变,即使它们在函数内被更改,除非它们被显式输出。

e.g。考虑一下:

function y = myfunc(x);

    x = x*2;
    y = x*3;
    disp(x)

end

在该功能中,x加倍。假设我的工作区中有一个变量x,值为10.如果我拨打y = myfunc(2),我会看到" 4"已移位 - 而y将输出为12而不是6.但是,基本工作空间中的x永远不会更改,这正是预期的行为。

如果我希望更改x,我必须将其明确设置为函数的输出,并且故意以覆盖变量{{1}的方式调用函数例如x

正如评论中所建议的那样,如果您正在使用每个数字,则可以使用[x y] = myfunc(2);,但使用randperm从20开始随机选择10的更通用示例:< / p>

randsample