Seite 1 von 1

Einfaches Füllen einer Matrix

Verfasst: Freitag 16. Oktober 2009, 09:55
von gooogle
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

Verfasst: Freitag 16. Oktober 2009, 10:16
von ms4py
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!

Verfasst: Freitag 16. Oktober 2009, 10:42
von gooogle
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

Verfasst: Freitag 16. Oktober 2009, 10:56
von CM

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*

Verfasst: Freitag 16. Oktober 2009, 11:24
von ms4py
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)

Verfasst: Freitag 16. Oktober 2009, 11:32
von gooogle
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. ;)

Verfasst: Freitag 16. Oktober 2009, 11:53
von numerix
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!

Verfasst: Freitag 16. Oktober 2009, 11:56
von /me
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.