読者です 読者をやめる 読者になる 読者になる

pythonで再現性をもたせるためシードを揃えて行をシャッフル

シェルスクリプトでシードも揃えたままシャッフルできたら楽だったのですけど、ちょっとわからなかったのでパイソンで、リストをシードを揃えてシャッフルしてその順番に並べるってコード。

 

#!/usr/bin/python
# -*- encoding: utf-8 -*-

import numpy as np
import sys
pit = 1 # シードここの値を変える


argvs = sys.argv
argc = len(argvs)
if(argc != 2):
    quit()
argvs[1]

def shuf(fn):
    fp = open(fn,"r")
    fw = open(fn.replace('scale','scale.shuf'),"w")
    inline = fp.readlines()#一行ずつ読み込む
    las_arr = np.array(range(len(inline)))#行数分リストを作る
    len_inline = len(inline)
    np.random.seed(pit)
    np.random.shuffle(las_arr)#リストをシャッフル
    for i in range(0,len_inline):
        for j in range(0,len_inline):
            if las_arr[i] == j:#リストの順番と揃ったら
                fw.write(inline[j-1])
file_name = "filename"+"argvs[1]+".scale"#ファイル名
shuf(file_name)