Pythonに限ったことではないと思うんですが。とりあえず、私は機械学習のことをやるまでは、あまり数学的なことにプログラミングで取り組んでいなかったので、今回思わぬところにはまってしまったので書いておきます。
下記のような式があります。
[(x[0],x[2],r*((-1)**(x[1]!=hoge))) for x in trainExamples]
これは、次のように分解できるかと思います。
trainExamples =[ [3,1,2], [4,-1,1] ] hoge = 1 r = -1 for x in trainExamples: a = x[0] b = x[2] c = r* ((-1) ** x[1] != hoge) print(a, b, c)
次の
c = r* ((-1) ** x[1] != hoge)
部分なんですけど、
x[1] != hoge
はTrue かFalseなので、1か0ということだと思います。
つまりは -1**True か -1**Falseってことですね。
しかし、
-1**True
ってやっても
-1**False
ってやっても、答えは -1 なんです。ん?そもそも判定の意味ないぞー?
って思ってたら、元のコードをよく見ると
(-1)**True
(-1)**False
ってやらなきゃいけなかったんですね( ゚Д゚)
(-1)**True は -1
(-1)**False は 1
です。
-1**True、-1**False とか、1に1乗するか、1を0乗するかした後、マイナス1をかけているので、どちらも-1になるわけです。
カッコの場所でエライ違いだった。
はぁー、むずかし。
ちなみに、0乗とか?-1乗とか?についてさっぱり忘れてしまったので、次のサイトさんを参考にさせて頂きました。m(_ _)m
べき乗とは何か。ゼロ乗・マイナス乗・分数乗・無理数乗ってどういう意味?
https://atarimae.biz/archives/20521