我想在心理上在随机位置生成图像对象

时间:2014-10-18 14:40:43

标签: psychopy

是否有办法生成图像对象以显示在随机位置,其中一个必须是在12个可能的干扰器位置之一中出现的目标?

2 个答案:

答案 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,:])