2017-09-29 2 views
-3

Ich habe ein Array von n-Werten und ich möchte n jedes Mal n verschiedene Werte davon subtrahieren (jedes Mal, wenn Sie vom vorherigen Ergebnis subtrahieren).Python iterative Subtraktion einer Liste

Ich möchte die gesamte Matrix speichern.

Ich habe versucht, mit zwei verschachtelten for-Schleifen, aber ich habe es nicht geschafft, es zu tun, und ich konnte keine Post streng im Zusammenhang ...

data = https://www.dropbox.com/s/anhyqq9f7h75qee/trace1.dat?dl=0

values_to_subtract = (Daten finden - k)/m

k = konstanter Wert

Beispiel:

x = np.array([x1,x2,x3]) 

m = 3 

dx = (x-k)/m 

Ich möchte jedes Element x des eigenen berechneten Menge dx und ich möchte verringern sie 3-mal tun, um diese Matrix zu erhalten:

Target Result

Vielen Dank

+2

die tatsächliche Array schreiben und – RomanPerekhrest

+0

Bearbeiten Sie die Frage ein kleines ausgearbeitetes Beispiel zeigen Endergebnis erwartet. –

Antwort

0

Diese ist ziemlich einfach zu tun mit broadcasting.

Zum Beispiel:

>>> import numpy as np 
>>> dx = np.array([[1], [2], [3]]) 
>>> dx 
array([[1], 
     [2], 
     [3]]) 
>>> dx * np.arange(4) 
array([[0, 1, 2, 3], 
     [0, 2, 4, 6], 
     [0, 3, 6, 9]]) 
>>> x = np.array([[10], [10], [10]]) 
>>> x - dx * np.arange(4) 
array([[10, 9, 8, 7], 
     [10, 8, 6, 4], 
     [10, 7, 4, 1]]) 

Welche Ausstrahlung hat, in der Regel, wenn Ihre Arrays kompatibler Formen sind, ist Operationen entlang aller Achsen in einer schönen Weise anzuwenden. Also bei diesem Schritt:

>>> dx * np.arange(4) 
array([[0, 1, 2, 3], 
     [0, 2, 4, 6], 
     [0, 3, 6, 9]]) 

numpy nimmt die outer product, nämlich .:

[1]     [0 1*1 2*1 3*1] 
[2] * [0 1 2 3] = [0 1*2 2*2 3*2] 
[3]     [0 1*3 2*3 3*3] 

und das gibt alle Werte, die Sie von x abziehen wollen. Runds x - dx * np.arange(4) nimmt den Spaltenvektor x und überträgt es in die gleiche Form wie das äußere Produkt (das Kopieren der Werte in jeder Spalte), so daß diese letzte Operation sieht wie

[10 10 10 10]  [0 1*1 2*1 3*1] 
[10 10 10 10] - [0 1*2 2*2 3*2] 
[10 10 10 10]  [0 1*3 2*3 3*3] 

, die gleich wie LaTeX Gleichung :

[x1 x1-dx x1-2dx x1-3dx] 
[x2 x2-dx x2-2dx x2-3dx] 
[x3 x3-dx x3-2dx x3-3dx] 
+0

Vielen Dank Alexander ... aber aus irgendeinem Grund mein Code (der gleiche von Ihnen) funktioniert es nicht, weil es besagt, dass Operanden nicht zusammen mit verschiedenen Formen gesendet werden konnten. Es ist das äußere Produkt, das nicht funktioniert, denke ich. Bedenken Sie, dass meine Daten (mein 'x') als txt-Datei mit np.loadtxt geladen werden ... – Giulia

+0

Ihre ist wahrscheinlich nicht die gleiche Form wie meine. Beachten Sie, dass mein 'x' Form (3,1) ist. Welches ist deines? –

+0

Wenn ich es mit np.shape überprüfe sagt es (10136,) – Giulia