Pythonで複素数の剰余演算(モジュロ)はどのように機能するのか
Pythonにおいて、フロア除算演算子(//)と剰余演算子(%)の扱いは、バージョンによって大きく異なります。Python 3.xでは、これらの演算子を複素数に対して使用することはできません。一方、Python 2.7.xでは複素数に対してもこれらの演算が定義されており、実際に計算を行うことができます。
Python 3での挙動:エラーになる
Python 3.xで複素数同士に剰余演算子を適用すると、TypeErrorが発生します。
>>> x=9+2j >>> y=2+1j >>> x%y Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> x%y TypeError: can't mod complex numbers.
Python 2.7での挙動:計算できる
同じコードをPython 2.7.xで実行すると、複素数の剰余が正しく返されます。
>>> x=9+2j >>> y=2+1j >>> x%y (1-2j)
複素数の剰余の計算方法
Python 2.7における複素数の剰余演算は、次の式に基づいて計算されます。
x % y = x −(x // y × y)
つまり、「元の値から、フロア除算の結果に分母を掛けた値を差し引いたもの」が剰余として返されます。実際にこの式を使って確認してみましょう。
>>> x-(x//y)*y (1-2j)
このように、x%y の結果と x-(x//y)*y の結果が一致することがわかります。
まとめ
- Python 3.xでは、複素数に対する
//と%の使用は禁止されており、実行するとTypeErrorになります。 - Python 2.7.xでは複素数の剰余演算がサポートされており、
x % y = x - (x // y) * yの式で計算されます。 - Python 3で複素数の剰余的な計算が必要な場合は、
divmod()やcmathモジュール、あるいは上記の式を自前で実装する方法が考えられます。
-
PythonのBokehで画像を操作・表示する方法
Pythonの可視化ライブラリBokehで画像を扱うには、image_url()メソッドを使い、画像URLのリストを渡すのが基本です。このメソッドを使うことで、ローカルやWeb上にある画像をプロット領域内に簡単に配置できます。実装の手順output_file()でデフォルトの出力先を設定し、show()を呼び出したときに結果がHTMLファイルとして保存されるようにします。figure()でプロット用の新しいFigure(図)オブジェクトを作成します。image_url()メソッドで、指定したURLから読み込んだ画像を描画します。show()を呼び出して、Bokehオブジェクトやアプリケーション
-
Pythonで文字列と数値を連結する方法をわかりやすく解説
Pythonで文字列と数値を連結する基本の方法Pythonでは、文字列と数値をそのまま + 演算子で結合することはできません。連結するには、str() 関数を使って数値を文字列型に変換する必要があります。以下は基本的な例です。>>> a = string >>> b = 1 >>> print(a + str(b)) string1このように str(b) によって数値 1 が文字列 1 に変換され、文字列同士として正しく連結されます。Python 2で使えたバッククォート記法についてPython 2では、数値をバッククォート(`)で囲むこ