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

回答編集履歴

2

追記

2020/03/24 05:29

投稿

kirara0048
kirara0048

スコア1399

answer CHANGED
@@ -23,4 +23,53 @@
23
23
  ということですか?
24
24
 
25
25
  英語ですが、以下のサイトが参考になります。
26
- [A basic introduction to NumPy's einsum – ajcr – Haphazard investigations](http://ajcr.net/Basic-guide-to-einsum/)
26
+ [A basic introduction to NumPy's einsum – ajcr – Haphazard investigations](http://ajcr.net/Basic-guide-to-einsum/)
27
+
28
+ ---
29
+
30
+ ```python
31
+ """
32
+ i = 第0軸
33
+ j = 第1軸
34
+ k = 第2軸
35
+ """
36
+ ----- a -----
37
+ j 0 1 2
38
+ i k 0 1 2
39
+ 0 #[[[1 2 3] [4 5 6] [7 8 9]]
40
+ 1 # [[1 2 3] [4 5 6] [7 8 9]]
41
+ 2 # [[1 2 3] [4 5 6] [7 8 9]]
42
+ 3 # [[1 2 3] [4 5 6] [7 8 9]]]
43
+
44
+ ----- b -----
45
+ j 0 1 2
46
+ i k 0 1 2
47
+ 0 #[ [1 0 0]
48
+ 1 # [2 0 0]
49
+ 2 # [3 0 0]
50
+ 3 # [4 0 0] ]
51
+
52
+ """
53
+ A{i, j, k} と B{i, j, k} を要素ごとに掛け算したい。
54
+ Bには [i,j,k] の3軸のうち、真ん中の軸が欠けている。
55
+ →→Bの2軸の間にj軸を追加すると以下のようになる
56
+ """
57
+ ----- b[:,None,:] -----
58
+ j 0 1 2
59
+ i k 0 1 2
60
+ 0 #[[[1 0 0] [ > ] [ > ]]
61
+ 1 # [[2 0 0] [ > ] [ > ]]
62
+ 2 # [[3 0 0] [ > ] [ > ]]
63
+ 3 # [[4 0 0] [ > ] [ > ]]]
64
+
65
+ """
66
+ k(第2軸)を総計して潰すので、sum(axis=2)
67
+ """
68
+ ----- (a*b[:, None, :]).sum(2) -----
69
+ j 0 1 2
70
+ i k -
71
+ 0 # [[ 1 4 7]
72
+ 1 # [ 2 8 14]
73
+ 2 # [ 3 12 21]
74
+ 3 # [ 4 16 28]]
75
+ ```

1

追記

2020/03/24 05:29

投稿

kirara0048
kirara0048

スコア1399

answer CHANGED
@@ -20,4 +20,7 @@
20
20
  # [ 4 16 28]]
21
21
  ```
22
22
 
23
- ということですか?
23
+ ということですか?
24
+
25
+ 英語ですが、以下のサイトが参考になります。
26
+ [A basic introduction to NumPy's einsum – ajcr – Haphazard investigations](http://ajcr.net/Basic-guide-to-einsum/)