随机选择的元素n次,没有选择不止一次相同的元素

10视图(30天)
你好!我试图随机选择一个元素从一个字符串predifined次数,但我不知道我可以避免相同的元素不止一次. .下面是我写的代码(我的问题可能更理解通过代码中的注释)。
% % * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
信=“ABCD”;
ntrials = 3;
nletters = 4;
因为我= 2:ntrials
j = 1: nletters
*%需要显示一个随机的来信但同样的信件
%的信不能出现不止一次在这个嵌套循环。*
结束
结束
% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *的代码 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
输出示例:BCAD阿布扎比商业银行
谢谢!

接受的答案

1月
1月 2017年10月12日
编辑:1月 2017年10月12日
也许你的意思是:
我= 2:ntrials
C =字母(randperm(长度(字母),nletters))
结束
你想存储不同的输出?

更多的答案(3)

凸轮扎尔茨贝格
凸轮扎尔茨贝格 2017年10月12日
你好玛丽亚,
通常有两种方法可以做到这一点在编程。一是去除原始数组的每个元素被选中。另将跟踪新元素,看看前一个已经存在允许新的选择。前者是更快,尽管后者可能是必要的,如果你有重复输入数组中的元素,和不想重复输出数组。
如果你没有任何重复原来的数组,你可以很容易地在MATLAB。你使用 randperm 随机原始数组,然后选择前n项:
str =“abcd”;
newStr = str (randperm(元素个数(str)));
outStr = newStr (1: nletters);
把所有在第一个循环,你是好去。
凸轮
3评论

登录置评。


玛丽亚K
玛丽亚K 2017年10月12日
编辑:玛丽亚K 2017年10月12日
你好了。两个以上回复给我相同的结果。谢谢你的时间! !但我不想把所有的字母字符串,每执行较小的循环,我想* 一个 *信,一定是不一样的。我想我需要知道这封信的选择在过去的实例(嵌套)循环因此它不会再选择……
例如。我得到的输出:
BACD
BDAC
DBAC
BCAD
ACBD
BDCA
ACBD
ACDB
我真正想要的是这样的:
B
D
一个
C
一个
C
B
D
2的评论
詹姆斯Tursa
詹姆斯Tursa 2017年10月12日
编辑:詹姆斯Tursa 2017年10月12日
“…我只是希望 一个 信,它必须再也不一样了……”
但在你上面的例子 重复相同的信。什么是你真正想要的吗?循环通过随机的方式所有的字母,然后重新开始?在这种情况下,使用randperm()方法已被提出。randperm()的调用一次,用一个一个字母从结果到筋疲力尽,又称之为等等。

登录置评。


玛丽亚K
玛丽亚K 2017年10月12日
编辑:玛丽亚K 2017年10月12日
我把整个代码的方式改变它,即使它还使用psychtoolbox……我有4个试验和在每一个试验我想展示一系列字母在屏幕上(如。“ABCD”)一个接一个(例如B然后是C D),以随机的顺序…我在嵌套循环不能避免重复的字母,例如在第一个试验中我可能会:C C D然后,因此错失了B和C重复……现在的for循环这样:
因为我= 1:ntrials
j = 1: nLetters
msize =元素个数(p.letter);
一个= p。信(randperm (msize, 1));%得到一个随机的来信p。信= ' ABCD '
disp(一个);
屏幕(“DrawText”窗口,(x1, y1,
1);
t0 =屏幕(“翻转”、窗、t0 + blankDur);%的信上
t0 =屏幕(“翻转”、窗、t0 + stimDur);%的信了
结束
结束
抱歉后变得如此之久! !
6个评论

登录置评。

标签

社区寻宝

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

开始狩猎!