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

Eli*_*ICA 49 python

我知道这是一个电气工程惯例,但我仍然想知道为什么它被选为Python.我不知道其他具有复数文字的编程语言,所以我没有任何可比较的东西,但有没有人知道任何使用我?

Bil*_*ard 36

正如您所猜测的那样,它似乎是因为Python遵循电气工程惯例.这是Python bug跟踪器Issue10562的交换:

BoštjanMeyak:在Python中,字母"j"表示虚构单位.如果我们在这方面遵循数学并且假想单位用'i'表示,那将是很好的.

Michael Foord:我们遵循使用j的工程.

(我即将关闭这个作为wontfix但是Antoine特别热衷于马克处理这个问题......)

马克狄金森:我想补充我自己的想法:"J"的一个(不)-1平方根有,迈克尔指出,在工程使用的历史(特别是电气工程)和物理.就个人而言,我本来希望'我'到'j',但现在更改它会导致(IMO)无端破损.这真的不值得大惊小怪.

...

很久以后:

Guido van Rossum:这不会修复.首先,字母'i'或大写字母'I'看起来太像数字了.语言解析器(在源代码中)或内置函数(int,float,complex)解析数字的方式不应该是可本地化的或可以任何方式配置的; 那是在路上要求巨大的失望.如果你想用'i'而不是'j'来解析复数,你已经有了很多解决方案.

  • 整个问题线程令人沮丧.他们基于错误的前提拒绝了这个想法.`I`(不是`i`)用于工程和物理中的当前,而Python是区分大小写的.另外,`I`从不用作数字的后缀 - 而是用'A`代替(安培).`I`是变量,'A`是单位.`i`只用于虚数.`j`作为后缀实际上更令人困惑,因为`J`作为后缀实际上用于物理和工程(焦耳). (24认同)
  • 整个推理是荒谬的,因为每个符号(包括`j`)都用于物理学中的某些东西,没有理由让当前的例外.更糟糕的是......当`I`代替`i`用于电流时,`j`用于电流密度(和通常的通量).所以无论谁做出这个论点,实际上只用一支箭就可以双膝射击.此外,小写的`i`在排版中看起来很整洁(并且不像任何数字,因为它是半宽),而`j`则低于基线.当它在exponent中排版时(这不是python问题,但仍然......),这会变得更加丑陋. (6认同)
  • `i`有时用于表示AC电流以区分DC值([例如](https://en.wikipedia.org/wiki/Alternating_current#Mathematics_of_AC_voltages)).并不是说它仍然不是奇怪的推理,不一定是错误的前提. (5认同)
  • @DaveS是的,我认为guido`i`看起来像`1`是唯一"勉强"可接受的原因......但从技术上讲,如果你使用一种使`i`和`1`看起来相似的字体,它也是假的,你已经在问问题......整个"电气工程"可以解释它的起源,但这并不意味着它有意义.因为`i`和`I`在python中实际上没有特定的含义.据我所知,几乎所有可能的符号都被用于几乎任何科学领域,它们甚至比实际用符号键盘输入更多......想想APL ...... (5认同)
  • 我同意 Python 使用“j”很奇怪,但它在电气工程中确实有意义。我们经常使用“i”表示交流电流,使用“I”表示直流电流,此外,交流电流通常使用复数表示,这意味着在同一个方程中需要两个“i”。当然,“j”用于表示电流密度,但这种情况发生的频率要低得多,而且据我所知,它通常也不复杂。当然,我们可以通过为当前选择不同的符号来解决这个问题,因为“i”对此似乎相当任意。但我们确实需要两个符号不同。 (3认同)
  • “如果你想使用‘i’而不是‘j’来解析复数,你已经有很多可用的解决方案了”——他在说什么? (2认同)

And*_*ndy 14

Python采用了电气工程师使用的惯例.在该字段中,i用于表示当前并j用作-1的平方根.

记录了一个错误,将其更改为iPython 3.3.根据Guido van Rossum的推理,它被解析为"WONTFIX" :

这不会被修复.首先,字母'i'或大写字母'I'看起来太像数字了.语言解析器(在源代码中)或内置函数(int,float,complex)解析数字的方式不应该是可本地化的或可以任何方式配置的; 那是在路上要求巨大的失望.如果你想用'i'而不是'j'来解析复数,你已经有了很多解决方案.

  • 我记得 Guido 已经回答过这个问题(但我确信这是不同的来源)。但是我在[Python的历史](http://python-history.blogspot.it/)中找不到它。而且,是的,我*确实*记得 Guido 准确地表达了您的论点:“j”用于工程中,我们采用了该约定。 (2认同)
  • 而且我知道他们将 `1J` 别名为 `1j`,但他们不应该这样做。对于任何物理学家或工程师来说,“1J”看起来就像“1焦耳”。 (2认同)

Nic*_*teo 7

要回答"有没有人知道任何[使用复数字文字的其他编程语言]使用i?"

是的,C++自C++ 14标准以来.您必须使用正确的命名空间:

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

std::complex<double> z = 2 + 3i;
Run Code Online (Sandbox Code Playgroud)

  • 即使是MATLAB,它主要由工程师使用,也支持虚拟数字的"i".它支持`i`和`j`.并且python不会将`i`用作后缀用于任何目的.如果旧代码的兼容性是问题,那么为什么不支持像MATLAB这样的新版本的功能呢?*C++,Ruby,Go,R和Perl*都使用`i`. (4认同)
  • 据我所知,几乎所有其他支持虚数的语言都使用“i”。 (3认同)