Verwenden von i und j als Variablen in Matlab
i
und j
sind sehr beliebt Variablennamen (siehe z.B., diese Frage und diese eine).
Beispielsweise in Schleifen:
for i=1:10,
% do something...
end
Als Indizes in der matrix:
mat( i, j ) = 4;
Warum sollte nicht Sie als Variablennamen verwendet werden, die in Matlab?
Kommentar zu dem Problem
Natürlich habe ich nicht die Flagge als solche, sondern ausgehend von den Antworten, die ich würde sagen, dies ist "in Erster Linie opinion-based". 😉 Ich persönlich würde nicht aufgeben, auf
i
, j
, - k
als generic-Schleife Variablen-Namen. @A. Donda gut, das ist Ihr Meinung 😉
@Shai, das ist dein letzter Satz in der Frage: "Warum sollten Sie nicht als Variablennamen verwendet werden, die in Matlab?" So ist es sehr unklar, warum lehnst du meine edition auf deine Frage?! Ich änderte Ihren Titel zu konstruktiver Titel "Warum sollte NICHT, verwenden Sie i und j als Variablen in Matlab"
InformationsquelleAutor der Frage Shai | 2013-02-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil
i
undj
sind die beiden Funktionen, die die imaginäre Einheit:Also eine variable namens
i
oderj
diese überschrieben, potenziell geräuschlos brechen-code Komplex Mathematik.Mögliche Lösungen sind die Verwendung von
ii
undjj
als loop-Variablen statt, oder mit1i
wenni
ist erforderlich zur Darstellung der imaginären Einheit.InformationsquelleAutor der Antwort Oliver Charlesworth
Es ist gute Praxis, um zu vermeiden
i
undj
Variablen um zu verhindern, dass Verwirrung über Sie zu Variablen oder die imaginäre Einheit.Persönlich verwende ich jedoch
i
undj
als Variablen, die oft als der index von kurzen Schleifen. Um Probleme zu vermeiden in meinem eigenen code, Folge ich einer anderen guten Praxis in Bezug aufi
undj
: nicht verwenden Sie bezeichnen komplexe zahlen. In der Tat, Matlab-eigene Dokumentation Staaten:Anstatt also die Vermeidung von zwei sehr Häufig verwendeten Variablennamen aufgrund eines potenziellen Konflikts, ich bin ausdrücklich über imaginäre zahlen. Es macht auch meinen code mehr klar. Jederzeit sehe ich
1i
weiß ich, dass es stelltsqrt(-1)
weil könnte es nicht evtl. eine variable sein.InformationsquelleAutor der Antwort shoelzer
In alten Versionen von MATLAB, es verwendet werden, um einen guten Grund zu vermeiden, die Verwendung von
i
undj
als Variablen-Namen - frühe Versionen der MATLAB JIT-waren nicht klug genug, um zu sagen, ob Sie diese als Variablen oder als imaginäre Einheiten, und würde Sie daher ausschalten, viele sonst mögliche Optimierungen.Dein code würde also langsamer nur durch die Präsenz von
i
undj
als Variablen, und beschleunigen würde, wenn Sie geändert haben Sie etwas anderes. Das ist, warum, wenn Sie Lesen, durch viel MathWorks-code, sehen Sieii
undjj
verwendet, ziemlich weit verbreitet als loop-Indizes. Für eine Weile, MathWorks vielleicht sogar inoffiziell beraten Menschen zu tun, die sich (obwohl Sie immer offiziell beraten Menschen, Programm für Eleganz/Wartbarkeit statt, um auch immer den aktuellen JIT macht, wie es ist, ein bewegliches Ziel zu jeder version).Aber das ist ziemlich lange her, und heutzutage ist es ein bisschen wie ein "zombie" - Problem, das ist wirklich viel weniger wichtig, als viele Menschen denken immer noch, aber weigert sich, zu sterben.
In jeder neueren version, es ist wirklich eine persönliche Präferenz, ob
i
undj
als Variablennamen oder nicht. Wenn Sie tun eine Menge Arbeit mit komplexen zahlen, möchten Sie vielleicht zu vermeideni
undj
als Variablen, um zu vermeiden, jede kleine mögliche Risiko der Verwirrung (obwohl Sie auch/stattdessen wollen nur1i
oder1j
auch für weniger Verwirrung, und ein wenig bessere performance).Auf der anderen Seite, in meine typische Arbeit, die ich nie viel mit komplexen zahlen, und ich finde meinen code besser lesbar, wenn ich fühlen Sie sich frei zu verwenden
i
undj
als loop-Indizes.Sehe ich eine Menge Antworten hier, die sagen Es wird nicht empfohlen..., ohne zu sagen, wer das tut, empfehlen. Hier ist das Ausmaß von MathWorks aktuelle Empfehlungen, in der aktuellen release-Dokumentation für
i
:InformationsquelleAutor der Antwort Sam Roberts
Wie beschrieben in den anderen Antworten, die Verwendung von
i
im Allgemeinen code wird nicht empfohlen, aus zwei Gründen:Vorgeschlagen:
1i
undii
empfohlen. Jedoch, obwohl diese sowohl feine Abweichungen voni
ist es nicht sehr schön zu bedienen, diese beiden alternativen zusammen.Hier ist ein Beispiel, warum (persönlich) ich mag es nicht:
Wird man nicht so leicht falsch verstanden, für zwei oder drei, aber zwei und drei ähneln einander.
Daher meine persönliche Empfehlung wäre: wenn Sie manchmal die Arbeit mit komplexen code verwenden Sie immer
1i
kombiniert mit einem anderen loop-variable.Beispiele der einzelnen Buchstaben Indizes, für, wenn Sie nicht viele loop-Variablen und Buchstaben genügen:
t
,u
,k
undp
Beispiel mehr Indizes:
i_loop
,step
,walk
, undt_now
Dies ist natürlich eine Frage des persönlichen Geschmacks, aber es sollte nicht schwer zu finden, die Indizes zu verwenden, die eine klare Bedeutung haben, ohne wachsenden zu lange.
InformationsquelleAutor der Antwort Dennis Jaheruddin
Es wurde darauf hingewiesen, dass
1i
ist eine akzeptable und eindeutige Art und Weise zu schreibensqrt(-1)
, und als solche gibt es keine Notwendigkeit zu verwenden zu vermeideni
. Dann wieder, als Dennis hingewiesen (https://stackoverflow.com/a/14893729/1967396), kann es schwierig sein, den Unterschied zu sehen zwischen1i
undii
. Mein Vorschlag: verwenden Sie1j
als die imaginäre Konstante, wo möglich. Es ist der gleiche trick, Elektrotechniker beschäftigen - Sie nutzenj
fürsqrt(-1)
weili
bereits für aktuelle.Ich persönlich nie verwenden
i
undj
; ich benutzeii
undjj
als Kurzformel Indizierung von Variablen (und kk, ll, mm, ...) und1j
wenn ich komplexe zahlen.InformationsquelleAutor der Antwort Floris
Verwechslung mit der imaginären Einheit wurde auch hier behandelt, aber es gibt einige andere mehr prosaischen Gründen, warum diese und andere Buchstaben sind Variablennamen manchmal entmutigt.
MATLAB-spezifisch: wenn du coder zum generieren von C++ - Quellcode aus Ihren MATLAB-code (nicht, es ist schrecklich), dann sind Sie ausdrücklich gewarnt, nicht zu Wiederverwendung von Variablen wegen der möglichen Eingabe Auseinandersetzungen.
In der Regel, und je nach Ihren IDE -, ein Einzel-Buchstaben-Variablen-Namen können zu Chaos mit Textmarker und suchen/ersetzen. MATLAB nicht darunter leiden, und ich glaube, dass Visual Studio noch nicht ein problem hatte, für einige Zeit, aber die C/C++ coding standards wie MISRA etc. neigen dazu zu raten, gegen Sie.
Ich für meinen Teil meide alle Buchstaben Variablen, trotz der offensichtlichen Vorteile für die direkte Umsetzung der mathematischen Quellen. Es dauert ein wenig zusätzlichen Aufwand in den ersten paar hundert mal, Sie tun es aber nach, dass Sie aufhören zu bemerken, und die Vorteile, wenn Sie oder eine andere Arme Seele kommen, zu Lesen, Ihre Codes, sind legion.
InformationsquelleAutor der Antwort xenoclast
Standardmäßig
i
undj
stehen für die imaginäre Einheit. So aus der MATLAB-Sicht, miti
als variable ist irgendwie wie mit1
als variable.InformationsquelleAutor der Antwort yo'
Es sei denn, Sie sind sehr verwirrt user ich denke es gibt sehr wenig Risiko mit Variablennamen ich und j und ich benutze Sie regelmäßig. Ich habe nicht gesehen, keine offizielle Angabe, dass diese Praxis sollte vermieden werden.
Während es wahr ist, dass die Abschattung der imaginären Einheit könnte zu einiger Verwirrung führen, in einem Kontext wie bereits in anderen posts, insgesamt ich einfach nicht sehen es als ein großes Problem. Es gibt weit mehr verwirrende Dinge, die Sie tun können in MATLAB, nehmen wir zum Beispiel die Definition
false=true
Meiner Meinung nach das einzige mal, Sie sollten wahrscheinlich vermeiden, ist, wenn Ihr code beschäftigt sich explizit mit imaginären zahlen.
InformationsquelleAutor der Antwort gregswiss
Jede nicht-triviale code enthält mehrere
for
Schleifen, und die best practices empfehlen die Verwendung einer beschreibenden Namen bezeichnend für seinen Zweck, und Umfang. Für Urzeiten (und, sofern seine 5-10 Zeilen-Skript, das ich nicht zu speichern), habe ich immer die mit Variablen Namen wieidxTask
,idxAnotherTask
undidxSubTask
etc.Oder mindestens die Verdoppelung des ersten Buchstabens des Arrays es ist die Indizierung z.B.
ss
indexsubjectList
,tt
indextaskList
, aber nichtii
oderjj
die hilft mir nicht mühelos erkennen, welches Feld Sie die Indizierung aus meiner mehrere for-Schleifen.InformationsquelleAutor der Antwort Pradeep Reddy Raamana