Numpy-Array bearbeiten

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
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Hallo :D
Ich habe eine Matrix in einer txt-Datei der Form:

Code: Alles auswählen

0.999740 -0.022772 0.000984 5.249225 
0.022680 0.998140 0.056591 -7.087649 
-0.002271 -0.056554 0.998397 30.771022 
0.000000 0.000000 0.000000 1.000000 
und lese sie folgendermaßen in ein Array:

Code: Alles auswählen

f = file("MAT_0016", "r")
data = np.loadtxt(f)
f.close()
print data
Jetzt möchte ich aber die letzte Spalte (also die Werte [5.25, -7.08, 30.77]) bearbeiten. Dafür benutze ich doch slicing(), ungefähr so:

Code: Alles auswählen

print data[0:4, 4:]
was mir doch eigentlich die letzte Spalte ausgeben sollte. Was aber nicht geht :D
Ich möchte dann die Werte wie folgt bearbeiten:

Code: Alles auswählen

5.249225 / 1.022
-7.087649 / -1.0022
30.771022 / 2.0022
Also einfach durch feste Werte teilen. Wie mache ich das?
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Also mir ist klar, dass ich mit:

Code: Alles auswählen

data[i][3] 
die Elemente auswählen kann, aber wie kann man das eleganter machen und vor allem den alten durch den neuen Wert ersetzen?
Benutzeravatar
__blackjack__
User
Beiträge: 13110
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Ede1994: Warum sollte ``data[0:4, 4:]`` die letzte Spalte ergeben? Das würde alle Spalten ab der 5. Spalte liefern, das Array hat aber nur 4 Spalten. Beim ersten Index sind die expliziten Zahlen unnötig – Du willst ja einfach *alle* Zeilen.

Die vierte Spalte enthält vier Werte – wie Du die jetzt durch *drei* Werte teilen möchtest ist mir nicht klar. Wenn Du da auch *vier* Werte hast, dann macht man das ganz einfach in dem man das Array durch eine Sequenz mit vier Werten teilt.

Code: Alles auswählen

In [101]: data
Out[101]: 
array([[ 9.9974000e-01, -2.2772000e-02,  9.8400000e-04,  5.2492250e+00],
       [ 2.2680000e-02,  9.9814000e-01,  5.6591000e-02, -7.0876490e+00],
       [-2.2710000e-03, -5.6554000e-02,  9.9839700e-01,  3.0771022e+01],
       [ 0.0000000e+00,  0.0000000e+00,  0.0000000e+00,  1.0000000e+00]])

In [102]: data[:, 3]                                                        
Out[102]: array([ 5.249225, -7.087649, 30.771022,  1.      ])

In [103]: data[:, 3] / [1.022, -1.0022, 2.0022, 42]                         
Out[103]: array([ 5.13622798,  7.0720904 , 15.36860553,  0.02380952])
Alternativ könnte man die letzte Spalte auch mit -1 statt 3 ausdrücken. Das sind alles Numpy-Grundlagen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
Ede1994
User
Beiträge: 72
Registriert: Dienstag 2. Mai 2017, 12:41

Oha..stimmt. Zählen müsste man können, zumal ich ja vorhin sogar data[k][3] geschrieben habe..
Danke.

Ehm...aber bei mir funktioniert es nicht...

Code: Alles auswählen

[[  9.99740000e-01  -2.27720000e-02   9.84000000e-04   5.24922500e+00]
 [  2.26800000e-02   9.98140000e-01   5.65910000e-02  -7.08764900e+00]
 [ -2.27100000e-03  -5.65540000e-02   9.98397000e-01   3.07710220e+01]
 [  0.00000000e+00   0.00000000e+00   0.00000000e+00   1.00000000e+00]]
 
 data[:,3] / [1.022, -1.0022, 2.0022, 1]
 
 [[  9.99740000e-01  -2.27720000e-02   9.84000000e-04   5.24922500e+00]
 [  2.26800000e-02   9.98140000e-01   5.65910000e-02  -7.08764900e+00]
 [ -2.27100000e-03  -5.65540000e-02   9.98397000e-01   3.07710220e+01]
 [  0.00000000e+00   0.00000000e+00   0.00000000e+00   1.00000000e+00]]
Sorry, falls ich auf dem Schlauch stehe...aber was übersehe ich?
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Code: Alles auswählen

data[:,3] =/ n.array([1.022, -1.0022, 2.0022, 1])
Der Operator "/" gibt ein neues Array zurück, verändert aber nicht die Arrays. Der Operator =/ verändert das Array.
a fool with a tool is still a fool, www.magben.de, YouTube
Antworten