Seite 1 von 1

Kann man Arrays in Numpy anweisen mit dem Index 1 anzufangen anstelle mit Index 0 ?

Verfasst: Mittwoch 4. November 2015, 03:01
von Spielkamerad
Hallo !

Ich habe hier den Ausschnitt aus einem Listing -->


import numpy as np

n = int(input ("Ordnung des Systems : "))

a = np.zeros(shape=(n+1,n+1))


Wenn man für n = 2 in das laufende Programm eingibt, dann existieren die Arrayelemente a[0,0] und a[0,1] und a[0,2] und a[1,0] und a[2,0] ebenfalls.

Eigentlich brauche ich für das, was ich vorhabe, aber gar keine Elemente mit dem Index 0 (Null).

Gibt es mittels numpy (oder einem ähnlichen Modul wie numpy, falls vorhanden) in Python die Möglichkeit Arrays mit dem Index 1 beginnen zu lassen anstelle des Index 0 ?

Re: Kann man Arrays in Numpy anweisen mit dem Index 1 anzufangen anstelle mit Index 0 ?

Verfasst: Mittwoch 4. November 2015, 07:26
von __LC__
Moin Spielkamerad.

Ich verstehe zwar nicht ganz worauf die hinaus willst, aber sollte nicht

a = np.zero(shape=(n, n))

das gewünschte Resultat bringen?

Schöne Grüße

Re: Kann man Arrays in Numpy anweisen mit dem Index 1 anzufangen anstelle mit Index 0 ?

Verfasst: Mittwoch 4. November 2015, 07:28
von Sirius3
Python startet alle Listen und Arrays mit dem Index 0. Warum, lies diesen Artikel von Dijkstra. Überleg Dir, an welchen Stellen es wirklich einen Unterschied macht, dass der Index verschoben ist, und dass die n. Ordnung am Index n-1 liegt. Deine Input-Schleife sieht dadurch nämlich nicht viel anders aus:

Code: Alles auswählen

import numpy as np

n = int(input ("Ordnung des Systems : "))

coefficients = np.zeros(shape=(n, n))

for zeile in range(n):
    for spalte in range(n):
        coefficients[zeile, spalte] = input("Koeffizient a({},{}) :".format(zeile + 1, spalte + 1))
Mit anderen Worten: lass Dich drauf ein und gewöhn Dich dran.

PS: gewöhn Dir gleich sprechende Variablennamen an.

Re: Kann man Arrays in Numpy anweisen mit dem Index 1 anzufangen anstelle mit Index 0 ?

Verfasst: Mittwoch 4. November 2015, 07:32
von MagBen
Hier ist ein Thread zu diesem Thema:
https://mail.scipy.org/pipermail/numpy- ... 57848.html

Das Fazit der dortigen Diskussion ist, dass Du es schon richtig gemacht has. Wenn du unbedingt 1-basierte Indizierung brauchst dann:
"make all your arrays one bigger than you need and ignore element zero."

Wenn ich Fortran Programme in C++ neu schreibe, dann habe ich auch manchmal dieses Problem. Es kann sehr Fehlerträchtig sein einen 1-basierten Algorithmus mit mehrdimensionalen Arrays 0-basiert neu zu schreiben. Ich habe dazu eine eigene Array-Klasse, die zur Laufzeit zwischen 0- und 1-basiert wechseln kann. In C++ geht sowas einfach durch Verschiebung des Pointers auf das erste Element.

Re: Kann man Arrays in Numpy anweisen mit dem Index 1 anzufangen anstelle mit Index 0 ?

Verfasst: Mittwoch 4. November 2015, 13:12
von Sirius3
@MagBen: ja das Umschreiben von Algorithmen aus 1-basierten Sprachen ist nervig. Da hilft es, mit den Testfällen anzufangen. Wenn man dann tatsächlich jede Funktionseinheit in einer eigenen Funktion schreibt, bleibt die Fehlersuche im Rahmen. Irgendeine Mailingliste als Quelle zu zitieren ist mit Vorsicht zu genießen. Wen's interessiert, ich hab nicht auf irgendwen verwiesen. Wenn man seinen Algorithmus auf Papier schreibt, ist ein Indexshift ja keine große Sache. Lieber einmal sich an die Gegebenheiten (0-basierter Index) anpassen, als sich immer wieder damit herumschlagen zu müssen.

Re: Kann man Arrays in Numpy anweisen mit dem Index 1 anzufangen anstelle mit Index 0 ?

Verfasst: Mittwoch 4. November 2015, 17:37
von Spielkamerad
Hallo !

Recht herzlichen Dank für alle Antworten !!

Dann weiß ich jetzt Bescheid.

LG