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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Spielkamerad
User
Beiträge: 8
Registriert: Dienstag 3. November 2015, 02:08

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 ?
Benutzeravatar
__LC__
User
Beiträge: 32
Registriert: Dienstag 1. März 2011, 14:08
Wohnort: 127.0.0.1
Kontaktdaten:

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
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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.
a fool with a tool is still a fool, www.magben.de, YouTube
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@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.
Spielkamerad
User
Beiträge: 8
Registriert: Dienstag 3. November 2015, 02:08

Hallo !

Recht herzlichen Dank für alle Antworten !!

Dann weiß ich jetzt Bescheid.

LG
Antworten