Python
 Computer >> コンピューター >  >> プログラミング >> Python

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 モジュール、あるいは上記の式を自前で実装する方法が考えられます。
  1. PythonのBokehで画像を操作・表示する方法

    Pythonの可視化ライブラリBokehで画像を扱うには、image_url()メソッドを使い、画像URLのリストを渡すのが基本です。このメソッドを使うことで、ローカルやWeb上にある画像をプロット領域内に簡単に配置できます。実装の手順output_file()でデフォルトの出力先を設定し、show()を呼び出したときに結果がHTMLファイルとして保存されるようにします。figure()でプロット用の新しいFigure(図)オブジェクトを作成します。image_url()メソッドで、指定したURLから読み込んだ画像を描画します。show()を呼び出して、Bokehオブジェクトやアプリケーション

  2. Pythonで文字列と数値を連結する方法をわかりやすく解説

    Pythonで文字列と数値を連結する基本の方法Pythonでは、文字列と数値をそのまま + 演算子で結合することはできません。連結するには、str() 関数を使って数値を文字列型に変換する必要があります。以下は基本的な例です。>>> a = string >>> b = 1 >>> print(a + str(b)) string1このように str(b) によって数値 1 が文字列 1 に変換され、文字列同士として正しく連結されます。Python 2で使えたバッククォート記法についてPython 2では、数値をバッククォート(`)で囲むこ