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

回答編集履歴

2

説明追加

2021/02/28 11:08

投稿

ppaul
ppaul

スコア24672

answer CHANGED
@@ -1,10 +1,37 @@
1
- エラーになるでしょう。
1
+ その場合はエラーになるでしょう。
2
2
 
3
3
  ~~何がしたいのでしょうか?~~
4
4
 
5
+ numpyの場合で考えます。
5
6
  x @ y とします。
6
7
  x と y の一方がスカラーである場合はエラーになります。
7
8
  x と y が同じ長さの一次元配列であれば内積になりますが、長さが違うとエラーになります。
8
9
  x と y が二次元配列で、x.shape[1]とy.shape[0]が等しければ、
9
10
  x @ y は (x.shape[0], y.shape[1])の形状を持つ行列積になります。
10
- x.shape[1]とy.shape[0]が等しくなければエラーになります。
11
+ x.shape[1]とy.shape[0]が等しくなければエラーになります。
12
+
13
+ より一般的に言うと、
14
+ ```explanation
15
+ @演算子があるとpythonインタプリタは__matmul__を呼び出します。
16
+ 従って@演算子が何をするかはクラスの定義次第です。
17
+ ```
18
+ 以下に例を示します。
19
+
20
+ ```python
21
+ >>> class fake_int(int):
22
+ ... def __matmul__(self, x):
23
+ ... return (self + x)/2
24
+ ...
25
+ >>> x = fake_int(2)
26
+ >>> y = fake_int(3)
27
+ >>>
28
+ >>> print(x @ y)
29
+ 2.5
30
+ ```
31
+
32
+ ```explanation
33
+ ここではfake_intつまり偽整数のクラスを定義しました。
34
+ @が平均値を出すように定義しておいたので、結果は2.5になっています。
35
+ 上記のnumpyの場合はで書いたことは、numpyのndarrayには__matmul__メソッドが
36
+ そういうふうに定義されているからです。
37
+ ```

1

追加

2021/02/28 11:08

投稿

ppaul
ppaul

スコア24672

answer CHANGED
@@ -1,3 +1,10 @@
1
1
  エラーになるでしょう。
2
2
 
3
- 何がしたいのでしょうか?
3
+ ~~何がしたいのでしょうか?~~
4
+
5
+ x @ y とします。
6
+ x と y の一方がスカラーである場合はエラーになります。
7
+ x と y が同じ長さの一次元配列であれば内積になりますが、長さが違うとエラーになります。
8
+ x と y が二次元配列で、x.shape[1]とy.shape[0]が等しければ、
9
+ x @ y は (x.shape[0], y.shape[1])の形状を持つ行列積になります。
10
+ x.shape[1]とy.shape[0]が等しくなければエラーになります。