Seite 1 von 1

Numpy-Array bearbeiten

Verfasst: Dienstag 20. August 2019, 10:22
von Ede1994
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?

Re: Numpy-Array bearbeiten

Verfasst: Dienstag 20. August 2019, 11:18
von Ede1994
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?

Re: Numpy-Array bearbeiten

Verfasst: Dienstag 20. August 2019, 11:31
von __blackjack__
@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.

Re: Numpy-Array bearbeiten

Verfasst: Dienstag 20. August 2019, 11:34
von Ede1994
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?

Re: Numpy-Array bearbeiten

Verfasst: Donnerstag 22. August 2019, 08:14
von MagBen

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.