因此,我正在为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的代码,但我遇到了与上一个问题相同的问题:无替换部分无效。
答案 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