回答編集履歴

2

追記

2020/03/24 05:29

投稿

kirara0048
kirara0048

スコア1399

test CHANGED
@@ -49,3 +49,101 @@
49
49
  英語ですが、以下のサイトが参考になります。
50
50
 
51
51
  [A basic introduction to NumPy's einsum – ajcr – Haphazard investigations](http://ajcr.net/Basic-guide-to-einsum/)
52
+
53
+
54
+
55
+ ---
56
+
57
+
58
+
59
+ ```python
60
+
61
+ """
62
+
63
+ i = 第0軸
64
+
65
+ j = 第1軸
66
+
67
+ k = 第2軸
68
+
69
+ """
70
+
71
+ ----- a -----
72
+
73
+ j 0 1 2
74
+
75
+ i k 0 1 2
76
+
77
+ 0 #[[[1 2 3] [4 5 6] [7 8 9]]
78
+
79
+ 1 # [[1 2 3] [4 5 6] [7 8 9]]
80
+
81
+ 2 # [[1 2 3] [4 5 6] [7 8 9]]
82
+
83
+ 3 # [[1 2 3] [4 5 6] [7 8 9]]]
84
+
85
+
86
+
87
+ ----- b -----
88
+
89
+ j 0 1 2
90
+
91
+ i k 0 1 2
92
+
93
+ 0 #[ [1 0 0]
94
+
95
+ 1 # [2 0 0]
96
+
97
+ 2 # [3 0 0]
98
+
99
+ 3 # [4 0 0] ]
100
+
101
+
102
+
103
+ """
104
+
105
+ A{i, j, k} と B{i, j, k} を要素ごとに掛け算したい。
106
+
107
+ Bには [i,j,k] の3軸のうち、真ん中の軸が欠けている。
108
+
109
+ →→Bの2軸の間にj軸を追加すると以下のようになる
110
+
111
+ """
112
+
113
+ ----- b[:,None,:] -----
114
+
115
+ j 0 1 2
116
+
117
+ i k 0 1 2
118
+
119
+ 0 #[[[1 0 0] [ > ] [ > ]]
120
+
121
+ 1 # [[2 0 0] [ > ] [ > ]]
122
+
123
+ 2 # [[3 0 0] [ > ] [ > ]]
124
+
125
+ 3 # [[4 0 0] [ > ] [ > ]]]
126
+
127
+
128
+
129
+ """
130
+
131
+ k(第2軸)を総計して潰すので、sum(axis=2)
132
+
133
+ """
134
+
135
+ ----- (a*b[:, None, :]).sum(2) -----
136
+
137
+ j 0 1 2
138
+
139
+ i k -
140
+
141
+ 0 # [[ 1 4 7]
142
+
143
+ 1 # [ 2 8 14]
144
+
145
+ 2 # [ 3 12 21]
146
+
147
+ 3 # [ 4 16 28]]
148
+
149
+ ```

1

追記

2020/03/24 05:29

投稿

kirara0048
kirara0048

スコア1399

test CHANGED
@@ -43,3 +43,9 @@
43
43
 
44
44
 
45
45
  ということですか?
46
+
47
+
48
+
49
+ 英語ですが、以下のサイトが参考になります。
50
+
51
+ [A basic introduction to NumPy's einsum – ajcr – Haphazard investigations](http://ajcr.net/Basic-guide-to-einsum/)