Есть ли способ генерировать объекты изображения, которые появляются в случайных местах, с ограничением, что один из них должен быть целью, которая появляется в одном из 12 возможных мест отвлечения?
Я хочу генерировать объекты изображения в случайных местах в психоанализе.
Ответы (2)
Майкл прав, дополнительная информация была бы полезна, но если я вас правильно понял, попробуйте что-то вроде этого:
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) вместо этого ссылайтесь на переменную position. Не забудьте изменить параметр раскрывающегося меню справа от него с «постоянный» на «установить каждый повтор», например.
$positions[3]
Итак, если у вас есть 6 объектов для случайного позиционирования, используйте $positions[0] .. [5]
, по одному для каждого объекта.
Вы можете сделать что-то подобное, чтобы изменить размер, цвет и т. д.
Надеюсь, это дает вам суть. Что касается местоположения отвлекающих факторов, вы можете иметь 2 массива для хранения местоположений вместо одного и случайным образом выбирать один из списка отвлекающих элементов для использования каждый раз.
Если я правильно понимаю ваш вопрос, у вас есть 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,:])