開発環境
- 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 コメント:
コメントを投稿