I have a question about shuffling, but first, here is my code:
from psychopy import visual, event, gui
import random, os
from random import shuffle
from PIL import Image
import glob
a = glob.glob("DDtest/targetimagelist1/*")
b = glob.glob("DDtest/distractorimagelist1/*")
target = a
distractor = b
pos1 = [-.05,-.05]
pos2 = [.05, .05]
shuffle(a)
shuffle(b)
def loop_function_bro():
win = visual.Window(size=(1280, 800), fullscr=True, screen=0, monitor='testMonitor', color=[-1,-1,-1], colorSpace='rgb')
distractorstim = visual.ImageStim(win=win,
image= distractor[i], mask=None,
ori=0, pos=pos1, size=[0.5,0.5],
color=[1,1,1], colorSpace='rgb', opacity=1,
flipHoriz=False, flipVert=False,
texRes=128, interpolate=True, depth=-1.0)
targetstim= visual.ImageStim(win=win,
image= target[i], mask=None,
ori=0, pos=pos2, size=[0.5,0.5],
color=[1,1,1], colorSpace='rgb', opacity=1,
flipHoriz=False, flipVert=False,
texRes=128, interpolate=True, depth=-2.0)
distractorstim.setAutoDraw(True)
targetstim.setAutoDraw(True)
win.flip()
event.waitKeys(keyList = ['space'])
for i in range (2):
loop_function_bro()
This code randomly shuffles a bunch of images and displays them. However, I would like it is shuffle the images in the same order so that both lists are displayed in the same random order. Is there an way to do this?
Cheers, :)
This question has been answered here and here. I particularly like the following for its syntactic simplicity
For a complete working example, see code below. Note that I've changed quite a bit to make the code much shorter, cleaner and faster. See comments.
Another way to randomize the images while maintaining the pairing is something you'd probably do anyway sometime: put them together in a list of dictionaries, where each dict represents a trial. So rather than the two
map
lines, do:Try printing the trial list (
print trialList
) to see what it looks like. And then loop over trials:I would create an array of numbers, shuffle it and sort the image lists both according to the shuffled numbers.
So both lists are shuffled in the same way.
The simplest way I can think to handle this is use a separate list for indices, and shuffle it instead.