Einfaches Füllen einer Matrix

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
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

Hallo

ich möchte gerne eine Matrix abhängig von zwei laufenden Indizes füllen. Hier ein kleines Beispiel:

CurrentRepetition1 = 0 # von 0 bis 5
CurrentRepetition2 = 1 # von 0 bis 5

AktuellerStatus = 2

Die Matrix sollte dann so aussehen:

Matrix = [ [0,2,0,0,0] ,0 ,0 ,0 ,0]
--------------------------------------------

Beim nächsten Durchlauf:

CurrentRepetition1 = 0
CurrentRepetition2 = 2
AktuellerStatus = 3

Matrix = [ [0,2,3,0,0] ,0 ,0 ,0 ,0]

--------------------------------------------

Ist ja relativ einfach, habe auch dafür ein Programm geschrieben, aber
bei mir bleiben die vorigen Werte nicht erhalten, sondern werden gelöscht:

Anbei der code:

Code: Alles auswählen


##-----------------------------

CurrentRepetition1 = 0
CurrentRepetition2 = 1

TestState = "Passed"

FailureMatrix1=[]
FailureMatrix2=[]
j=-1
##-----------------------------

if TestState == "Passed":
	j=1
else:
	j=0

'''For each repetition over repetition, actual 
TestState has to be buffered in a list as a matrix:'''

## Init- ##--------------------
for i in range(5):
	FailureMatrix1.append(0)
	FailureMatrix2.append(0)
##-----------------------------

CurrentRepetition1=1
CurrentRepetition2=2

FailureMatrix1.insert(CurrentRepetition2,j)
FailureMatrix2.insert(CurrentRepetition1,FailureMatrix1)

print "CurrentRepetition1:"; print CurrentRepetition1;
print "CurrentRepetition2:"; print CurrentRepetition2;
print "\n"
print "FailureMatrix1:"; print FailureMatrix1; print "\n","FailureMatrix2:"; print FailureMatrix2



del CurrentRepetition2, CurrentRepetition1
## ----------- -----------------------------
Wie kann ich dafür sorgen dass bei jedem Durchlauf, die Werte erhalten bleiben?

Grüsse und danke für die tipps
fff gh
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Du meinst wohl sowas:

Code: Alles auswählen

In [30]: matrix = [ [0] * 5 for i in xrange(5)]

In [31]: matrix[0][1] = 2

In [32]: matrix[0][2] = 3

In [33]: for line in matrix:
   ....:     print line
   ....:
   ....:
[0, 2, 3, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
Deine Datenstruktur ist keine richtige Matrix!
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

Hallo

ja, wenn man es genau nimmt, hast du natürlich recht ;)

Ich meinte eine Liste in Liste dieser Form:

Matrix = [ [0,1,0,1,1], [0,1,0,1,1], [0,1,0,1,1], [0,1,0,1,1], [0,1,0,1,1] ]

Grüsse
fff gh
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Code: Alles auswählen

In [1]: import numpy as np
In [2]: m = np.zeros((5,5), dtype=int)
In [3]: m
Out[3]: 
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
In [4]: m[0][1] = 2
In [5]: m
Out[5]: 
array([[0, 2, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
*duck*
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

gooogle hat geschrieben:Hallo

ja, wenn man es genau nimmt, hast du natürlich recht ;)

Ich meinte eine Liste in Liste dieser Form:

Matrix = [ [0,1,0,1,1], [0,1,0,1,1], [0,1,0,1,1], [0,1,0,1,1], [0,1,0,1,1] ]

Grüsse
Dann hast du ja jetzt zwei funktionierende Beispiele (einmal mit der StandardLibrary und einmal mit numpy)
gooogle
User
Beiträge: 66
Registriert: Freitag 15. Mai 2009, 19:13
Wohnort: burghausen

Hallo

leider nicht. Auch hier werden die vorigen werte zu 0 gesetzt.

1. durchlauf mit indizis 1, 1:
[[0 0 0 0 0]
[0 2 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]

2.durchlauf mit anderen indizis 3, 1:
[[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 2 0 0 0]
[0 0 0 0 0]]

ich möchte dass der inhalt für indizi 1,1 bei einem nächsten durchlauf erhalten bleibt. ;)
fff gh
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Dann machst du was falsch ... :wink:

Vermutlich liegt der Fehler bei Erzeugung deiner "Matrix".
Sieh dir das mal an und vergleiche mit dem, was hier schon gepostet wurde:

Code: Alles auswählen

>>> zeile = [0,0,0,0,0]
>>> matrix = []
>>> matrix.append(zeile)
>>> matrix.append(zeile)
>>> matrix
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
>>> matrix[1][1] = 5
>>> matrix
[[0, 5, 0, 0, 0], [0, 5, 0, 0, 0]]
>>> # ups!
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

gooogle hat geschrieben:Auch hier werden die vorigen werte zu 0 gesetzt.

1. durchlauf mit indizis 1, 1:
[[0 0 0 0 0]
[0 2 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]

2.durchlauf mit anderen indizis 3, 1:
[[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 2 0 0 0]
[0 0 0 0 0]]
Ich habe keine Ahnung was du da genau anstellst, aber es sieht stark so aus, als würdest du die Matrix jedesmal wieder neu aufbauen. Erstelle die Matrix einmal und weise dann nur noch die Werte zu.
Antworten