Why are complex numbers in Python denoted with 'j' instead of 'i'?

Python

Python Problem Overview


I know this is an electrical engineering convention, but I'm still wondering why it was chosen for Python. I don't know other programming languages with complex-number literals, so I don't have anything to compare against, but does anyone know any that do use i?

Python Solutions


Solution 1 - Python

It appears to be, as you guessed, because Python follows the electrical engineering convention. Here's an exchange from the Python bug tracker Issue10562:

> Boštjan Mejak: In Python, the letter 'j' denotes the imaginary unit. It would be great if we would follow mathematics in this regard and let the imaginary unit be denoted with an 'i'. > > Michael Foord: We follow engineering which uses j. > > (I was about to close this as wontfix but Antoine is particularly keen that Mark deals with this issue...) > > Mark Dickinson: Just to add my own thoughts: 'j' for a (not the ) square root of -1 has, as Michael points out, a history of use in engineering (particularly electrical engineering) and physics. Personally, I would have preferred 'i' to 'j' here, but changing it now would cause (IMO) gratuitous breakage. It really doesn't seem a big enough issue to be worth making a fuss about.

...

Much later:

> Guido van Rossum: This will not be fixed. For one thing, the letter 'i' or upper case 'I' look too much like digits. The way numbers are parsed either by the language parser (in source code) or by the built-in functions (int, float, complex) should not be localizable or configurable in any way; that's asking for huge disappointments down the road. If you want to parse complex numbers using 'i' instead of 'j', you have plenty of solutions available already.

Solution 2 - Python

Python adopted the convention used by electrical engineers. In that field, i is used to represent current and use j as the square root of -1.

There was a bug logged to change it to i in Python 3.3. It was resolves as a "WONTFIX" with this reasoning by Guido van Rossum:

> This will not be fixed. For one thing, the letter 'i' or upper case > 'I' look too much like digits. The way numbers are parsed either by > the language parser (in source code) or by the built-in functions > (int, float, complex) should not be localizable or configurable in any > way; that's asking for huge disappointments down the road. If you want > to parse complex numbers using 'i' instead of 'j', you have plenty of > solutions available already.

Solution 3 - Python

To answer "does anyone know any [other programming languages with complex-number literals] that do use i?"

Yes, C++ since the C++14 standard. You have to use the right namespace though:

#include <complex>
using namespace std::complex_literals;

std::complex<double> z = 2 + 3i;

Solution 4 - Python

j (not J) is used in Electrical Engineering as mentioned before. i for current: yes, both I (dc) and i (ac) are used for current.

Solution 5 - Python

i in electrical engineering is typically used for i(t) or instantaneous current. I is for steady state DC (non-complex) or rms values of AC current. In addition spacial coordinates are generally expressed as i,j,k but for two dimensional items i,j are all that are needed and the "i" is dropped so the perpendicular "j" is used as in 4j3 vs 4+3i or 4i3 -See that this is not 413 at a glance. J recognizes this notation in handling complex numbers. As a retired EE prof- I do like the use of "j" As for Current density "J" is used.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEli RoseView Question on Stackoverflow
Solution 1 - PythonBill the LizardView Answer on Stackoverflow
Solution 2 - PythonAndyView Answer on Stackoverflow
Solution 3 - PythonNick MatteoView Answer on Stackoverflow
Solution 4 - PythonOleksiiView Answer on Stackoverflow
Solution 5 - Pythonuser10973708View Answer on Stackoverflow