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

后端 未结 5 2232
-上瘾入骨i
-上瘾入骨i 2020-12-05 03:55

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 lit

相关标签:
5条回答
  • 2020-12-05 04:29

    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.

    0 讨论(0)
  • 2020-12-05 04:38

    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.

    0 讨论(0)
  • 2020-12-05 04:40

    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.

    0 讨论(0)
  • 2020-12-05 04:43

    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;
    
    0 讨论(0)
  • 2020-12-05 04:46

    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.

    0 讨论(0)
提交回复
热议问题