開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- Python 3.6 (プログラミング言語)
行列プログラマー(Philip N. Klein (著)、 松田 晃一 (翻訳)、 弓林 司 (翻訳)、 脇本 佑紀 (翻訳)、 中田 洋 (翻訳)、 齋藤 大吾 (翻訳)、オライリージャパン)の3章(ベクトル空間)、3.8(問題)、Vec の確認(コンテナの中のベクトル)問題3.8.1、3.8.2を取り組んでみる。
問題3.8.1、3.8.2
コード(Emacs)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from vec import Vec
import unittest
def vec_select(veclist, k):
return [v for v in veclist if v[k] == 0]
def vec_sum(veclist, D):
return sum([Vec(D, {k: v[k] for k in D}) for v in veclist], Vec(D, {}))
def vec_select_sum(D, veclist, k):
return vec_sum(vec_select(veclist, k), D)
def scale_vecs(vecdict):
return [(1 / k) * v for k, v in vecdict.items()]
class Test(unittest.TestCase):
def setUp(self):
self.d = d = {'a', 'b'}
def tearDown(self):
pass
# 3.8.1
# 1
def test_select0(self):
v1 = Vec(self.d, {'a': 1, 'b': 2})
v2 = Vec(self.d, {'a': 3, 'b': 4})
veclist = [v1, v2]
self.assertEqual(vec_select(veclist, 'a'), [])
def test_select1(self):
v1 = Vec(self.d, {'b': 2})
v2 = Vec(self.d, {'a': 3, 'b': 4})
veclist = [v1, v2]
self.assertEqual(vec_select(veclist, 'a'), [v1])
def test_select2(self):
v1 = Vec(self.d, {'b': 1})
v2 = Vec(self.d, {'b': 2})
veclist = [v1, v2]
self.assertEqual(vec_select(veclist, 'a'), [v1, v2])
# 2
def test_sum0(self):
self.assertEqual(vec_sum([], set()), Vec(set(), {}))
def test_sum1(self):
v1 = Vec(self.d, {'a': 1})
self.assertEqual(vec_sum([v1], self.d), v1)
def test_sum2(self):
v1 = Vec(self.d, {'a': 1})
d = {'a', 'b', 'c'}
v2 = Vec(d, {'a': 3, 'b': 4, 'c': 5})
self.assertEqual(vec_sum([v1, v2], {'a', 'b'}), Vec(
self.d, {'a': 4, 'b': 4}))
def test_select_sum0(self):
self.assertEqual(vec_select_sum(set(), [], 0), Vec(set(), {}))
def test_select_sum1(self):
v1 = Vec(self.d, {'a': 1})
v2 = Vec(self.d, {'b': 2})
self.assertEqual(vec_select_sum(self.d, [v1, v2], 'a'), v2)
def test_select_sum1(self):
v1 = Vec(self.d, {'b': 1})
v2 = Vec(self.d, {'b': 2})
self.assertEqual(vec_select_sum(self.d, [v1, v2], 'a'),
Vec(self.d, {'b': 3}))
# 3.8.2
def test_scale_vecs0(self):
self.assertEqual(scale_vecs({}), [])
def test_scale_vecs1(self):
v1 = Vec(self.d, {'a': 1})
v2 = Vec(self.d, {'b': 2})
vecdict = {1: v1, 2: v2}
self.assertEqual(scale_vecs(vecdict), [v1, 1 / 2 * v2])
if __name__ == '__main__':
unittest.main()
入出力結果(Terminal, IPython)
$ ./sample6.py -v test_scale_vecs0 (__main__.Test) ... ok test_scale_vecs1 (__main__.Test) ... ok test_select0 (__main__.Test) ... ok test_select1 (__main__.Test) ... ok test_select2 (__main__.Test) ... ok test_select_sum0 (__main__.Test) ... ok test_select_sum1 (__main__.Test) ... ok test_sum0 (__main__.Test) ... ok test_sum1 (__main__.Test) ... ok test_sum2 (__main__.Test) ... ok ---------------------------------------------------------------------- Ran 10 tests in 0.001s OK $
0 コメント:
コメントを投稿