为什么Python中的复数用'j'表示而不是'i'?

81 投票
8 回答
57838 浏览
提问于 2025-04-18 13:45

我知道这是一种电气工程的约定,但我还是想知道为什么在Python中选择了这个方式。我不太了解其他编程语言是否有复数的表示法,所以没有什么可以对比的,但有没有人知道其他语言是否也用i来表示复数?

8 个回答

2

在电气工程中,"i" 通常代表瞬时电流,写作 i(t)。而 "I" 则表示稳态直流电(简单的电流)或者交流电的有效值。还有,在表示空间坐标时,通常用 i、j、k 来表示,但如果只是在二维空间中,i 和 j 就够用了,所以会省略 "i",只用垂直的 "j"。比如说,4j3 和 4+3i 或 4i3 这几种写法看起来不一样,但其实它们代表的意思不同,注意不要搞混了。J 这个符号在处理复数时会用到这种表示法。作为一名退休的电气工程教授,我个人比较喜欢用 "j"。至于电流密度,通常用 "J" 来表示。

2

在电气工程中,j(不是大写的J)是用来表示某些东西的。至于电流,i是用来表示电流的:没错,直流电用大写的I,而交流电则用小写的i。

15

来回答“有没有其他编程语言使用复数常量i?”这个问题:

是的,C++从C++14标准开始就支持了。你需要使用正确的命名空间:

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

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

Python 这个编程语言采用了电气工程师的习惯。在这个领域,i 通常用来表示电流,而 j 则用来表示负数的平方根,也就是虚数单位。

在 Python 3.3 版本中,有人提议把虚数单位改成 i,这个提议被记录为一个 bug。但是,Python 的创始人 Guido van Rossum 认为这个问题不会被修复,原因如下:

这个问题不会被解决。首先,字母 'i' 或大写的 'I' 看起来和数字太像了。编程语言在解析数字时,无论是在源代码中还是通过内置函数(比如 int、float、complex),都不应该有地方可以本地化或配置;这样做只会在将来带来很大的麻烦。如果你想用 'i' 来解析复数,而不是 'j',其实已经有很多现成的解决方案可以使用了。

70

看起来,正如你猜测的那样,这是因为Python遵循了电气工程的惯例。下面是Python错误追踪器上的一段对话 Issue10562

Boštjan Mejak: 在Python中,字母'j'表示虚数单位。如果我们能像数学那样,用'i'来表示虚数单位,那就太好了。

Michael Foord: 我们遵循的是工程学的用法,使用'j'。

(我本来想把这个问题关闭,但Antoine特别希望Mark能处理这个问题...)

Mark Dickinson: 我想补充一下我的看法:'j'代表a(而不是the)的负一的平方根,正如Michael所指出的,这在工程(特别是电气工程)和物理学中有使用的历史。就我个人而言,我更喜欢用'i'而不是'j',但现在改动会导致不必要的问题。我觉得这并不是一个值得大惊小怪的事情。

...

很久以后:

Guido van Rossum: 这个问题不会被修复。首先,字母'i'或大写的'I'看起来太像数字了。数字的解析方式,无论是通过语言解析器(在源代码中)还是通过内置函数(int、float、complex),都不应该以任何方式可本地化或可配置;这样做会在未来带来巨大的失望。如果你想用'i'来解析复数,而不是'j',现在已经有很多解决方案可以使用了。

撰写回答