De ce în Python numerele complexe sunt notate cu „j” în loc de „i”? (Programare, Python)

Eli Rose a intrebat.

Știu că aceasta este o convenție de inginerie electrică, dar tot mă întreb de ce a fost aleasă pentru Python. Nu cunosc alte limbaje de programare cu literali de numere complexe, așa că nu am cu ce să compar, dar știe cineva vreunul care folosește „i”?

5 răspunsuri
Bill Șopârla

Se pare că este, așa cum ați ghicit, pentru că Python urmează convenția de inginerie electrică. Iată un schimb de replici de pe trackerul de erori Python Problema10562:

Boštjan Mejak: În Python, litera „j” desemnează unitatea imaginară. Ar fi grozav dacă am urma matematica în această privință și am lăsa ca unitatea imaginară să fie notată cu un „i”.

Michael Foord: Urmăm ingineria care folosește j.

(Eram pe punctul de a închide acest subiect ca fiind un wontfix, dar Antoine este deosebit de dornic ca Mark să se ocupe de această problemă…)

Mark Dickinson: Doar pentru a adăuga propriile mele gânduri: „j” pentru a (nu ) rădăcină pătrată a lui -1 are, după cum subliniază Michael, o istorie de utilizare în inginerie (în special în inginerie electrică) și fizică. Personal, aș fi preferat „i” în locul lui „j” aici, dar schimbarea acum ar cauza (IMO) o rupere gratuită. Chiar nu pare o problemă suficient de importantă pentru a merita să se facă atâta caz.

Mult mai târziu:

Guido van Rossum: Acest lucru nu va fi rezolvat. În primul rând, litera „i” sau majuscula „I” seamănă prea mult cu cifrele. Modul în care sunt analizate numerele, fie de către parserul limbajului (în codul sursă), fie de către funcțiile încorporate (int, float, complex) nu ar trebui să fie localizabil sau configurabil în niciun fel; asta înseamnă că se așteaptă dezamăgiri uriașe pe parcurs. Dacă doriți să analizați numere complexe folosind „i” în loc de „j”, aveți deja o mulțime de soluții disponibile.

Comentarii

    31

  • Întregul fir de probleme este frustrant de citit. Ei resping ideea pe baza unei premise false. I (nu i) este utilizat pentru curent în inginerie și fizică, iar Python este sensibil la majuscule și minuscule. De asemenea, I nu este niciodată folosit ca sufix la numere – A este folosit în schimb (amperi). I este variabila, iar A este unitatea. i se utilizează numai pentru numere imaginare. j ca sufix este de fapt mai confuz, deoarece J ca sufix este de fapt utilizat în fizică și inginerie (Joules). –  > Por DaveS.
  • i este folosit uneori pentru a reprezenta curentul alternativ, pentru a face distincția față de valorile de curent continuu (de exemplu). Nu că nu ar fi totuși un raționament ciudat, dar nu neapărat o premisă falsă. –  > Por sappjw.
  • Întregul raționament este ridicol, deoarece fiecare simbol (inclusiv j) este folosit pentru ceva în fizică, nu există niciun motiv pentru a face din curent o excepție. Chiar mai rău… în timp ce I în loc de i este folosit pentru curent, j este folosit pentru densitatea de curent (și pentru fluxuri în general). Așa că cine aduce acest argument, de fapt se împușcă în ambii genunchi cu o singură săgeată. De asemenea, minusculele i arată îngrijit în compoziția tipografică (și nu seamănă cu nicio cifră, pentru că are jumătate de lățime), în timp ce j se lipește sub linia de bază. Acest lucru devine și mai urât atunci când este tipărit în exponent (nu este o problemă python, dar totuși…). –  > Por orion.
  • @DaveS da, cred că guido i arată ca 1 este singurul motiv „abia” acceptabil… Dar, din punct de vedere tehnic, este, de asemenea, fals dacă utilizați un font care face o i și 1 să arate la fel, deja cauți probleme… Toată „ingineria electrică” ar putea explica originea, dar asta nu înseamnă că are sens. Pentru că i și I nu au, de fapt, o semnificație specială în python. Din câte știu eu, aproape toate simbolurile posibile sunt folosite în aproape orice domeniu științific și se folosesc chiar mai multe decât putem scrie cu o tastatură cu simboluri… gândiți-vă la APL…  > Por Loïc Faure-Lacroix.
  • If you want to parse complex numbers using 'i' instead of 'j', you have plenty of solutions available already – despre ce vorbește? –  > Por Kolay.Ne.
Andy

Python a adoptat convenția folosită de inginerii electrici. În acest domeniu, i este folosită pentru a reprezenta curentul și se folosește j ca rădăcină pătrată a lui -1.

A existat o eroare înregistrat pentru a o schimba în i în Python 3.3. Acesta a fost rezolvat ca un „WONTFIX” cu acest raționament de către Guido van Rossum:

Acest lucru nu va fi rezolvat. În primul rând, litera „i” sau majuscula „I” arată prea mult ca niște cifre. Modul în care numerele sunt analizate fie de către parserul limbajului (în codul sursă), fie de către funcțiile încorporate (int, float, complex) nu ar trebui să fie localizabile sau configurabile în niciun fel; asta înseamnă că se cer dezamăgiri uriașe pe parcurs. Dacă doriți să analizați numere complexe folosind „i” în loc de „j”, aveți deja o mulțime de soluții disponibile.

Comentarii

  • Îmi amintesc că Guido a răspuns deja la această întrebare (dar sunt sigur că a fost o sursă diferită). Cu toate acestea, nu o găsesc în The History of Python. Și, da, am da îmi amintesc că Guido a afirmat exact argumentul tău: j este folosit în inginerie și am adoptat această convenție. –  > Por Bakuriu.
  • i nu este folosită pentru a reprezenta curentul totuși. I este. Dar nu ca sufix la numere. A este utilizat în acest scop. Iar în ceea ce privește raționamentul lui Guido, Python face distincție între majuscule și minuscule, așa că de ce să susținem că i seamănă prea mult cu un 1? I poate, dar i nu este. –  > Por DaveS.
  • Și știu că au 1J aliasat la 1j, , dar nu ar trebui să o facă. 1J se pare că 1 Joule pentru orice fizician sau inginer. –  > Por DaveS.
Nick Matteo

Pentru a răspunde la întrebarea „cunoaște cineva [alte limbaje de programare cu literali de numere complexe] care folosesc i?”

Da, C++ începând cu standardul C++14. Trebuie să folosiți totuși spațiul de nume corect:

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

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

Comentarii

  • Aproape toate celelalte limbaje pe care le cunosc care acceptă numere imaginare folosesc i. –  > Por Loïc Faure-Lacroix.
  • Chiar și MATLAB, care este utilizat în principal de ingineri, suportă i pentru numere imaginare. Acesta acceptă atât i și j. Iar python nu utilizează i ca sufix în niciun scop. Dacă problema este compatibilitatea codurilor vechi, atunci de ce nu se acceptă ambele ca și MATLAB ca o caracteristică a noilor versiuni? C++, Ruby, Go, R și Perl folosesc toate i. –  > Por Naetmul.
Oleksii

j (nu J) este folosit în Inginerie Electrică, așa cum am menționat mai sus. i pentru curent: da, atât I (dc) cât și i (ac) sunt folosite pentru curent.

Comentarii

  • Și j este utilizat pentru densitatea de curent și, mai rău, se află direct lângă unitatea imaginară în modelul lui Drude. Cum ați rescrie (1+iωτ)j=σE în această notație? Acest raționament este fals. –  > Por orion.
user10973708

i în electrotehnică este folosit de obicei pentru i(t) sau curentul instantaneu. I este pentru valori staționare de curent continuu (necomplexat) sau valori eficace ale curentului alternativ. În plus, coordonatele spațiale sunt în general exprimate ca i,j,k, dar pentru elementele bidimensionale i,j sunt tot ce este necesar și se renunță la „i”, astfel încât se folosește perpendicularul „j”, ca în 4j3 vs 4+3i sau 4i3 -Vezi că acest lucru nu este 413 la prima vedere. J recunoaște această notație în manipularea numerelor complexe. În calitate de prof. EE pensionat – îmi place utilizarea lui „j” Ca și pentru densitatea de curent se folosește „J”.

Tags: