randomization of a vector by blocks

I am programming an experiment. Let's say that my experiment has 13 different conditions. Each condition is presented twice per block. There are two blocks in total. This makes a total of 52 trials.
conditions = repmat(1:13,1,4)
I can randomize the variable condition.
conditionsrand = conditions(randperm(length(conditions)))
However, I would like to do this randomization by block. That is every 26 trials there should be two instances of each condition. I think that this must be something easy, but I cannot find the solution.
Any idea?
Thanks!

 Risposta accettata

Jos (10584)
Jos (10584) il 25 Giu 2018
Modificato: Jos (10584) il 25 Giu 2018
C = repmat(1:13,1,2) % conditions per block
% [block1 block2]
rC = [C(randperm(numel(C))) C(randperm(numel(C)))] % *corrected

3 Commenti

Thanks for your reply! It gives me the following error
rC = [C(randperm(numel(C)) C(randperm(numel(C))] ↑ Error: Unexpected MATLAB expression.
In addition, each condition is presented 2 times per block, hence repmat(1:13,1,4). Also, I will have to increase the number of blocks to 100, so maybe the instructions rC = [C(randperm(numel(C)) C(randperm(numel(C))] will become too tedious?
THanks!
I forgot two closing brackets, which is now corrected. Do you want to create all trials at once? An easy alternative:
C = 1:5
numC = numel(C)
numCperBlock = 2
numBlocks = 3
[~,r] = sort(rand(numC, numCperBlock * numBlocks))
rC = reshape(C(r),1,[])
thanks! that works perfectly!

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Loops and Conditional Statements in Centro assistenza e File Exchange

Tag

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by