系列のシャフリング
心理測定関数を求める二重上下法では、2系列の各試行をランダムに実行する必要がある。このため、2つの文字AとBからなる系列をランダムに並べ替えるシャフリングのプログラムを作成した。リスト1に示すプログラムは、BL個の文字AとBL個の文字BからなるブロックをNS個繋いだ文字列をシャフリングするものである。このBL×2×NS個のシャフリングされた系列をNSer系列作成し、画面に表示さるとともに、ファイルに書き出す。
リスト1 シャフリングのプログラム例
import numpy
fout_nm = input('Output file name = ')
fout = open(fout_nm,
'w')
BL = int(input('Block
length = '))
NS = int(input('Number
of brock sets = '))
NSer = int(input('Number
of series = '))
a = ['A'] * BL + ['B'] * BL
for s in range(NSer):
print()
fout.write('\n')
for i
in range(NS):
numpy.random.shuffle(a)
for
j in a:
print(j, end = '')
fout.write(j)
print()
fout.write('\n')
fout.close()
リスト1の実行例を図1に示す。実行すると、まず出力ファイル名の設定が求められる。シャフリングした文字列は、ディスプレイにも表示されるとともに、この出力ファイルにもテキストとして書き出される。
図1
次に、各文字の個数がブロック長として設定される。図1の場合、5が設定されているので、各文字5個、AAAAABBBBB、が1つのセットとなり、このセットをシャフリングしたものがブロックセットの数として設定した個数、図1では7、連結したものが出力される。これが、系列数として指定した数だけ作成される。図1では、5系列が指定されている。
各文字の個数、ブロック長、を大きくとると、同じ文字が長く続きやすくなる。例えば、ブロック長として30を設定すると、図2のようになる。
図2
逆に短く、例えば1を設定すると、同じ文字が長く続くことは避けられる(図3)。
図3