開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- Python 3.6 (プログラミング言語)
行列プログラマー(Philip N. Klein (著)、 松田 晃一 (翻訳)、 弓林 司 (翻訳)、 脇本 佑紀 (翻訳)、 中田 洋 (翻訳)、 齋藤 大吾 (翻訳)、オライリージャパン)の2章(ベクトル)、2.12(ラボ: ドット積を用いた投票記録の比較)、2.12.6(宿敵)、課題 2.12.9 を取り組んでみる。
課題 2.12.9
コード(Emacs)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import random
def create_voting_dict(strlist):
return {s.split()[0]: [int(n) for n in s.split()[3:]] for s in strlist}
def policy_compare(sen_a, sen_b, voting_dict):
return sum([x * y for x, y in zip(voting_dict[sen_a], voting_dict[sen_b])])
def most_similar(sen, voting_dict):
l = voting_dict[sen]
names = list(voting_dict.keys())
names.remove(sen)
result = names[0]
a = policy_compare(sen, result, voting_dict)
for name in names[1:]:
t = policy_compare(sen, name, voting_dict)
if t > a:
a = t
result = name
return result
def least_similar(sen, voting_dict):
l = voting_dict[sen]
names = list(voting_dict.keys())
names.remove(sen)
result = names[0]
a = policy_compare(sen, result, voting_dict)
for name in names[1:]:
t = policy_compare(sen, name, voting_dict)
if t < a:
a = t
result = name
return result
def find_average_similarity(sen, sen_set, voting_dict):
return sum([policy_compare(sen, s, voting_dict) for s in sen_set]) / len(sen_set)
def find_average_record(sen_set, voting_dict):
votings = [voting_dict[sen] for sen in sen_set]
return list(map(lambda x: sum(x) / len(sen_set), zip(*votings)))
def bitter_rivals(voting_dict):
names = list(voting_dict.keys())
name1 = names[0]
name2 = names[1]
result = policy_compare(name1, name2, voting_dict)
for n1 in names:
for n2 in names:
if n1 == n2:
continue
t = policy_compare(n1, n2, voting_dict)
if t < result:
result = t
name1 = n1
name2 = n2
return [name1, name2, result]
filename = 'voting_record_dump109.txt'
with open(filename) as f:
mylist = list(f)
if __name__ == '__main__':
voting_dict = create_voting_dict(mylist)
print('2.12.9')
print(bitter_rivals(voting_dict))
入出力結果(Terminal, IPython)
$ ./sample12_9.py 2.12.9 ['Feingold', 'Inhofe', -3] $
0 コメント:
コメントを投稿