是否有办法生成图像对象以显示在随机位置,其中一个必须是在12个可能的干扰器位置之一中出现的目标?
答案 0 :(得分:0)
迈克尔是对的,更多信息会很有用,但如果我理解你的话,请尝试这样的事情:
1 /在试用循环中添加自定义代码对象
2 /在“开始实验”标签中:
import random, copy
from random import randint
from decimal import *
# setup an array to store 6 locations to randomly allocate to our shapes
# (or select random locations between (-1,-1) and (1,1) if you want them completely
# random though you then need to factor in overlaying shapes)
master_positions=[[0.2,0.6],[0.2,0],[0.2,-0.6],[0.6,0.6],[0.6,0],[0.6,-0.6]]
positions = copy.deepcopy(master_positions)
3 /在“开始例程”标签中:
# reset 'positions'
positions = copy.deepcopy(master_positions)
#randomise this for each trial
random.shuffle(positions)
4 /然后,在对象的图像/多边形(或其他)上,而不是硬编码(x,y)坐标,而是引用位置变量。请记住将右侧的下拉菜单选项从“常量”更改为“设置每次重复” e.g。
$positions[3]
因此,如果有6个对象随机定位,则使用$positions[0] .. [5]
,每个对象一个
你可以做类似的事情来改变大小,颜色...... ..
希望这能为您提供依据。关于干扰物位置,您可以有2个阵列来存储位置而不是一个,并且每次都会从干扰物列表中随机选择一个。
答案 1 :(得分:0)
如果我正确理解你的问题,你有12个刺激想要放在随机位置,其中一个图像(随机选择)需要在一组固定的一个位置(随机选择)发生位置。
我认为正确的方法是首先生成您的刺激位置,然后将每个位置分配给图像:
import numpy as np
# define fixed locations
fixedlocations=np.array([[100,10],
[-50,20],
[10,50]])
# define window constants
winx = 500
winy = 400
# get list of random locations
locations = np.random.uniform(low = -1,high = 1, size = [12,2])
# scale locations to window size
locations[:,0] *= winx
locations[:,1] *= winy
# i think psychopy requires integers for coordinates
locations = locations.round()
# pick a random fixed location and insert into the random locations
whichrandom = np.random.randint(low=0, high=12)
whichfixed = np.random.randint(low=0, high=2)
# substitute a random fixed location in at a random row
locations[whichrandom,:] = fixedlocations[whichfixed,:]
我在那里所做的一切都是在窗口中随机生成一组12个可能的位置,然后用固定集合中随机选择的位置替换一个(随机选择的)位置。
然后,您可以使用for循环为每个刺激分配位置。如果你的刺激在列表中,你可以这样做:
for i in range(12):
mystimuli[i].setPos(locations[i,:])