def getDistribution(stateDict, baseList, refList, movedObject): # データの数を取得しておく size = len(stateDict["before"]) # 前後のデータ数が違えばそこでエラー終了 if size != len(stateDict["after"]): print("[ViewPointManager]getDistribution:different size") return [] # ゼロ個だったら何かおかしいのでエラー終了 if size == 0: print("[ViewPointManager]getDistribution:size is zero") return [] move = [] transafter = [] for i in range(size): transafter.append( \ encoder.transformforViewPoint( \ stateDict["after"][i], baseList, refList \ ) \ ) # 選択した物体の最終位置のブレをスコアとして返す # 観点変換はここで使う diffDict = {} for o in movedObject: diffDict[o] = [] for i in range(size): for s in movedObject: diffDict[s].append(np.array(transafter[i][s])) meanDict = {} for s in movedObject: meanDict[s] = sum(diffDict[s]) / size diff = 0 for i in range(size): for s in movedObject: diff += np.linalg.norm(np.array(transafter[i][s]) - meanDict[s]) return [meanDict, diff]
def getStateswithViewPoint(filepathList, baseList, refList, detail=False): output = {} for fpath in filepathList: if fpath[-4:] != ".csv": if detail == True: text = "[ViewPointManager]getSateswithViewPoint:" print(text + fpath + " is not csv file") continue # パスをキーにして管理すると面倒なのでファイル名に変更 filename = os.path.basename(fpath) # print("file:"+filename) output[filename] = [] with open(fpath, "r", encoding="utf-8") as f: while True: line = f.readline() if line == "": break bstate = encoder.encodeState(line) astate = encoder.transformforViewPoint(bstate, baseList, refList) # data = encoder.serialize(astate) data = astate output[filename].append(data) return output