2015-09-30 41 views
0

我正在做一個實驗,並且使用一些編碼器和一些構建器構建了它的一部分,但我被困在一個位置上。實驗給人們提供了兩種不同的單詞列表(列表A和列表B),並且它的各個列表中的每個單詞在實驗開始時隨機與一個數字配對。 Psychopy向參與者顯示單詞和數字,重要的是,在他們隨機配對之後,字 - 數對將在實驗的其餘部分被綁定。我已經使用編碼器來隨機配對,並在飛行中爲兩個單詞列表構建一個條件文件。生成器然後使用這些構建的條件文件來呈現刺激(詞和數字)。組合條件文件

這是我卡住的部分。在呈現兩個單詞列表和他們的配對數字後,我需要列出A和B列表的一個子集,以及先前未提供的第三個單詞 - 數字對列表。因此,舉例來說,一個人可能會看到在實驗過程是這樣的:

首先介紹: 列表A: 坦率 - 1,蘇珊 - 3

B組: 鞋 - 2,灰溜溜 - 1

第二個介紹: 坦率 - 1,鞋 - 2,酒店 - 4

實驗的開始就是編碼器是用於創建Word和表數以及寫兩個列表的條件文件。這代碼如下:

import random 
import csv 

studylista=["shoe","bear","balls","dingy"] 
pointslista=[1,2,3,4] 

listaRand=random.sample(studylista,len(studylista)) 
listapointsRand=random.sample(pointslista,len(pointslista)) 

with open('WordsandPointslista.csv','wb') as w: 
    writer=csv.writer(w) 
    writer.writerow(['studylista','pointslista']) 
    for i in range(len(listaRand)): 
    writer.writerow([listaRand[i],listapointsRand[i]]) 

studylistb=["frank","robert","daniel","susan"] 
pointslistb=[1,2,3,4] 

listbRand=random.sample(studylistb,len(studylistb)) 
listbpointsRand=random.sample(pointslistb,len(pointslistb)) 

with open('WordsandPointslistb.csv','wb') as w: 
    writer=csv.writer(w) 
    writer.writerow(['studylistb','pointslistb']) 
    for i in range(len(listbRand)): 
    writer.writerow([listbRand[i],listbpointsRand[i]]) 

我需要兩個先前提出的名單中隨機子集與尚未提交給由參與者一起見識了一個額外的名單。已經看到的列表的前面的字數配對也需要保留。我似乎無法發現如何做到這一點。

我目前有兩個單詞列表,每個單獨的例程中都有循環。我想弄清楚如何創建第三個例程,它只顯示一些先前看到的字數對和一些新的字數對。 謝謝。

+0

通過「使用某些編碼器和某些構建器」,您是否確實意味着您完全在構建器中工作,但插入了代碼組件? (這樣會影響默認情況下由Builder導入的庫。) –

+0

您是否可以編輯以實際提出問題?目前尚不清楚實際問題是什麼。呈現響應的子集是構建器循環對話框中的一個直接選項。使用第三個列表的確切難度是什麼? –

+0

是的,我正在使用上面唯一的代碼完全使用生成器。 – Anchises

回答

0

在上面的代碼中,不要創建兩個單獨的兩列CSV文件,但要將它們合併到一個四列文件中。該文件可以用於多個循環。如果我正確理解你的設計,它將首先在一個循環中使用,以呈現所有'A'字/數字對,然後再次在第二個循環中呈現所有'B'字/數字對。最後,在最後一個循環中使用它來呈現'A''B'對的子集。此子集通過循環對話框中的「選定的行」字段應用。在前兩個循環中Randomisation是可選的,因爲您已經對行進行了混洗,但在第三個循環中可能需要進行循環,以避免以與前兩個循環相同的順序顯示行。

然後是如何處理第三組字/數字對的問題。最簡單的方法是在A & B設置的同時簡單創建它們並將其粘貼在同一個CSV文件中。但在這種情況下,您需要相同數量的單詞和數字,其中一些單詞和數字由於僅在最終循環中運行一個子集而不會顯示。另一種方法是在第三個循環之前有第二個代碼組件,它讀取現有文件,混合行,子集,然後添加新列。即做許多Builder環路會爲你做的事情,但是讓你不要「浪費」單詞,如果這對你很重要的話。

最後,我還簡化了上面的代碼。Builder已經導入numpy.radom.shuffle函數,比完成所有采樣等操作簡單,然後您不需要導入標準random庫。

+0

謝謝。我如何隨機化第二個演示文稿?我在$ texthere的構建器中使用了文本刺激來從條件文件中調用該列。第二個文本刺激用於調用數字的點值。我該如何做到這一點,使$ texthere和$ numberhere隨機顯示列表A,B或填充項中的某些內容?編碼器組件是否需要設置文本刺激?我還需要確保這種隨機化不是用替換。例如,我需要列表A的一半,列表B的一半,填充列表的一半。如果有偶爾的AA或BB順序序列沒問題。 – Anchises

+0

爲了弄清楚,列表A,B和填充點與點一起現在都在同一個條件文件中,我需要調用一個隨機的A,B或填充符,並在文本刺激中設置隨機調用的條件。 – Anchises

+0

您現在已經超越了隨機化方案Builder可以實現的「開箱即用」。例如它的設計不是沒有替換就做抽樣。通過將循環指定爲「完全隨機」並使用nReps> 1,然後僅顯示一個子集,可能會被黑客攻擊。但僅僅顯示A和B列表的一半,這是行不通的。你需要用你想要的條目構建一個條件文件。但是您可能會發現轉向編碼器以獲得充分的靈活性更容易。 –