Warum hat Matlab 1 basierte Indexierung [geschlossen]

8

Ich habe früher in Java und Python programmiert, aber seit kurzem benutze ich MATLAB für viele Dinge (insbesondere Computer Vision Algorithmen).

Allerdings hat MATLAB die Indexierung von Arrays, die von 1 statt 0 beginnen, was in fast allen Programmiersprachen, die ich bisher gesehen habe, die Norm ist.

Der Grund, warum 0-basierte Indexierung für mich Sinn ergab, war wie folgt: In jedem Prozessor, den ich gesehen habe, beginnt der Adreßindex mit 0x00000000 in einem 8-Bit-Prozessor, und wenn ich 5 Nummern speichern möchte, werden sie in der Adresse 0x00000000 bis 0x00000004 gespeichert. Daher ist eine Indexierung von 0 in Programmiersprachen sinnvoll.

Während ich nach dieser Frage suchte, fand ich Liste der 1-indizierten Programmiersprachen? und Ссылка , um nützlich zu sein.

Für mich ist das keine sehr praktische Notation, vielleicht weil ich früher in anderen Sprachen programmiert habe. Aber ich verstehe immer noch nicht, warum MATLAB (und jetzt auch Julia) eine 1-basierte Array-Indexierung hat und welche Vorteile es bietet. Kann jemand die Vorteile auflisten?

    
Anoop 20.03.2014, 22:48
quelle

2 Antworten

13

Warum gibt es eine 1-basierte Indexierung? Historische Gründe. ( Cleve Moler hat das entschieden). Es hat wahrscheinlich damit zu tun, dass die 1-basierte Indexierung die Konvention für die Matrixnotation ist.

Warum implementiert es nicht auch 0-basierte Indexierung? Herauf für einige nettes helles Lesen ?

Suchen Sie insbesondere nach Kommentaren von Cleve Moler (dem Erfinder von MATLAB) und Steve Lord (MathWorks Engineer). Nach vielem Austausch war die Grundüberlegung (zumindest im Jahr 2001), eine ergänzende 0-basierte Indizierung nicht zu implementieren, aus irgendwelchen philosophischen oder Kompatibilitätsgründen nicht möglich, obwohl sie als Argument der Rückwärtskompatibilität begann würde erfordern nur zu viel Aufwand, um MATLAB integrierte Funktionen zu aktualisieren:

  

Ich stimme zu, dass es möglich wäre, MATLAB eine nullbasierte Indexierung hinzuzufügen,   Verwenden Sie entweder eine neue Notation oder ein Objekt, das alle unsere überladen hat   vorhandene Indexierungsnotation. Es könnte rückwärts kompatibel sein in der   merke, dass alter Code, der nichts über das neue Zeug wusste oder es nicht benutzte, immer noch funktionierte   arbeiten.

     

Aber hier ist der springende Punkt: keiner von unserem existierenden Code würde funktionieren   das neue Objekt. Du konntest es nicht zeichnen; du könntest es nicht drucken; Sie   konnte sicherlich keine Matrix-Operationen damit machen. Ja, im Laufe der Zeit,   Alles könnte neu geschrieben werden, um die Erweiterung zu handhaben, aber das   ist, was wir vermeiden wollen. Es wäre wie AM und FM Radio - zwei   Systeme leben in der gleichen Box, aber mit separaten und unabhängigen   zugrunde liegende Technologie.

     

- Cleve Moler   
[email protected]

Übersetzung: Sie wollen nicht alle neuen Plot-, Print-, usw. Routinen schreiben.

    
chappjc 20.03.2014 23:41
quelle
4

Matlab ist dazu gedacht, die Funktionalität von Programmiersprachen für Leute zugänglich zu machen, die nicht gelernt haben, zu programmieren. Wenn die Indizes bei 0 beginnen, kann dies eine häufige Fehlerquelle für Leute sein, die mit der Programmierung nicht vertraut sind. Matlab möchte den Menschen ermöglichen, die von ihnen verstandenen Probleme ohne viel zusätzliches Wissen auf Probleme anzuwenden.

Die meisten Aufgaben, für die Matlab verwendet wird, z. Physik und Technik, verwenden Sie die Konvention der Indizes beginnend bei 1 in der Mehrheit der Literatur, so dass die Menschen, die in diesen Bereichen arbeiten, ihre Algorithmen nicht durch Subtraktion von 1 von allem konvertieren müssen.

Darüber hinaus ist Matlab die Abkürzung für "matrix laboratory", und in der Mathematik besteht die Konvention in der Regel darin, Matrizen beginnend bei 1 zu indexieren, so dass es sinnvoll ist, dass sie dieser Konvention folgen.

Ihr Grund dafür, warum es sinnvoll ist, bei 0 zu beginnen, ist vollkommen gut, aber es ist der Zweck einer Hochsprache wie Matlab, solche Aspekte zu verschleiern, die der Benutzer nicht kennen muss.

    
BZ1 20.03.2014 23:06
quelle

Tags und Links