teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

d

2020/01/30 17:26

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -47,4 +47,8 @@
47
47
  # [1 1 1 1]
48
48
  # [0 0 1 0]
49
49
  # [1 0 1 1]]
50
- ```
50
+ ```
51
+
52
+ 隣接行列 A が表すグラフを確認したら、一応あっているっぽい
53
+
54
+ ![イメージ説明](15c45229e8f256f46549ea47579dd6f1.png)

3

d

2020/01/30 17:26

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -41,8 +41,8 @@
41
41
  old = new
42
42
 
43
43
  ret = new.astype(int)
44
- print(f"(A + I)^{n - 1} = A^{n} =\n{ret}")
44
+ print(f"(A + I)^{n - 1} = (A + I)^{n} =\n{ret}")
45
- # (A + I)^2 = A^3 =
45
+ # (A + I)^2 = (A + I)^3 =
46
46
  # [[1 0 1 1]
47
47
  # [1 1 1 1]
48
48
  # [0 0 1 0]

2

d

2020/01/30 17:19

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -1,20 +1,50 @@
1
1
  numpy.array_equal(A, B) で行列 A と行列 B の値が等しいかどうか判定できるので、一致した場合はループを抜けるようにすればいいと思います。
2
2
  また、行列積は `A @ B` で計算します。`A * B` だと要素ごとの積となってしまうので注意してください。
3
3
 
4
+ ## 追記
5
+
6
+ ブール演算になっていなかったので、コードを修正しました。
7
+ numpy では、型が bool ならば、ブール演算になるようです。
8
+
4
9
  ```python
10
+ a = np.array([[True, True],
11
+ [True, False]])
12
+ b = np.array([[True, False],
13
+ [False, False]])
14
+
15
+ print(a + b)
16
+ # [[ True True]
17
+ # [ True False]]
18
+ print(a @ b)
19
+ # [[ True False]
20
+ # [ True False]]
21
+ ```
22
+
23
+ ## コード
24
+
25
+ ```python
5
26
  import numpy as np
6
27
 
7
- A = np.random.randint(0, 2, (2, 2)) # 各要素が0または1の正方行列
28
+ a = np.random.seed(5)
8
- I = np.eye(len(A), dtype=np.int64) # 単位行列
9
- print(A)
10
- print(I)
11
29
 
30
+ A = np.random.randint(0, 2, (4, 4)).astype(bool)
31
+ I = np.eye(len(A), dtype=bool)
32
+ print(A.astype(int))
33
+ print(I.astype(int))
34
+
12
35
  old = A + I
36
+
13
- for i in range(1000):
37
+ for n in range(1, 100):
14
38
  new = old @ (A + I)
15
39
  if np.array_equal(old, new):
16
40
  break # 同じなら抜ける
17
41
  old = new
18
-
42
+
19
- print(i)
43
+ ret = new.astype(int)
44
+ print(f"(A + I)^{n - 1} = A^{n} =\n{ret}")
45
+ # (A + I)^2 = A^3 =
46
+ # [[1 0 1 1]
47
+ # [1 1 1 1]
48
+ # [0 0 1 0]
49
+ # [1 0 1 1]]
20
50
  ```

1

d

2020/01/30 17:13

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  numpy.array_equal(A, B) で行列 A と行列 B の値が等しいかどうか判定できるので、一致した場合はループを抜けるようにすればいいと思います。
2
- また、行列積は `A @ B` で計算します。`*` だと要素ごとの積となってしまうので注意してください。
2
+ また、行列積は `A @ B` で計算します。`A * B` だと要素ごとの積となってしまうので注意してください。
3
3
 
4
4
  ```python
5
5
  import numpy as np