2016-10-27 2 views
2

Ich habe eine Reihe von binären NumPy-Arrays (die bewölkt (1s) und klar (0s) Himmel Pixel zu einem bestimmten Zeitpunkt) und haben sie zusammen, um die Gesamtzahl der Beobachtungen, wo Wolke ist zu finden in jedem Pixel vorhanden.Ändern/Überschreiben von NumPy-Array

Ich möchte jetzt den Prozentsatz der Wolke (Anzahl der Wolke (1s)/Gesamtbeobachtungen * 100) herausfinden, aber kann dies nicht in Python mit NumPy Arrays arbeiten, wie ich die ursprüngliche Variable ändern möchte.

Mein (vereinfacht) Code so weit ist:

import numpy as np 

arr1 = np.array([1,0,1]) 
arr2 = np.array([0,0,1]) 

total1 = np.add(arr1, arr2) 
>>> [1 0 2] 

total2 = total1     #Purely to make multiple to elaborate my issue 

variables = [total1, total2] 

for x in variables: 
    x = x + 100 

total1 
>>> [1 0 2] 

Grundsätzlich können Sie sehen, dass die total1 Variable nicht aktualisiert hat. Es arbeitet mit den folgenden:

for x in variables: 
    x += 100 

total1 
>>> [201, 200, 202] 

ich aber nicht den Wert auf 100 erhöhen wollen, ich möchte den Prozentsatz, so etwas wie berechnen:

for x in variables: 
    x = x/1 * 100    #I have simplified the maths for ease of reading 

#This is my desired output - note how total1 is updated, not created 
total1 
>>> [100, 0, 200] 

aber das funktioniert nicht. Ich greife auf die Variablen auf diese Weise zu, da ich viel mehr als 2 habe und versuche, meinen Code zu automatisieren, um für n Variablen zu laufen (die Variablennamen gehen von total1> gesamt n).

+0

Werfen Sie einen Blick auf numpy und seine Arrays. Dies ist ein perfekter Anwendungsfall. – Dschoni

+0

Ich verstehe Ihren Kommentar nicht? Ich benutze NumPy-Arrays und es funktioniert nicht? Bitte erläutern? –

+0

Können Sie Ihren Code klären? Ich denke, das Problem ist, dass Sie eine flache Kopie machen, wenn Sie eine tiefe Kopie machen wollten. Siehe https://docs.python.org/2/library/copy.html –

Antwort

0

Der folgende Code erstellt die Arrays, fügt sie zusammen und teilt jedes Element durch 100. Für den Prozentsatz müssen Sie die Anzahl der Einträge kennen. Sie könnten mit einem 3D-Array arbeiten und die Summe/Durchschnitt usw. -Funktionen von numpy verwenden.

import numpy as np 
a = np.array([1,0,1]) 
b = np.array([0,0,1]) 
c = (a+b)/100 

wenn Sie arange Ihre Eingabe ein 3D-Stapel von Bildern (nur eine wilde Vermutung) sein, können Sie so etwas wie:

import numpy as np 

a = np.array([[1,0,1],[0,0,0],[0,0,1]]) 
b = np.array([[0,0,0,],[0,1,0],[1,1,1]]) 
c = np.empty((2,3,3)) 
c[0]=a 
c[1]=b 

d = (c.sum(axis=0)/c.shape[0])*100 

Dies kann natürlich viel einfacher gemacht werden je nach die Eingabe. Ich lege es einfach hier hin, um jeden Schritt zu zeigen.

+0

Danke - ich bin mir dieser Methode bewusst, ich habe mich nur gefragt, ob ich das ganze machen kann, ohne in jedem Fall eine neue Variable 'c' zu erstellen. Haben Sie Ideen, ob dies möglich ist? –

+0

Nun, Sie müssen Ihre Ausgabe irgendwie ansprechen. Wenn Sie das Zeug an Ort und Stelle tun wollen, nennen Sie es nicht c, aber a :) – Dschoni

+0

Danke für Ihre Hilfe - ich verstehe Ihr Beispiel und ich weiß, dass das Ersetzen von 'c' mit 'a' die Werte überschreiben wird "a", aber das Problem, das ich beschrieben habe, bleibt bestehen, wenn ich dies mit der in meiner Frage angegebenen Methode "for x in Variable" mache. Das 'x' wird nicht aktualisiert - ich hoffe, das macht Sinn. –

0

Wenn Sie das Hinzufügen von in-place arbeiten nur wollen:

for i in range(len(variables)): 
    variables[i]+=100 

den Trick tun sollten. Beachten Sie, dass dies in hohem Maße ineffizient ist.

+0

Danke Dschoni nochmal, aber lies bitte die Originalfrage. Ich bin mir des inkrementellen Addierens/Subtrahierens bewusst, um die Variable zu aktualisieren (ich habe dies in der ursprünglichen Frage erläutert), aber ich möchte die ursprüngliche Variable überschreiben/aktualisieren, um stattdessen die Anzahl der Beobachtungen durch einen Prozentsatz zu ersetzen. Dies funktioniert nicht mit der Methode + = oder - = (oder ähnlich). –

+0

Dies setzt Variablen [i] zu dem, was Sie wollen. Sie können Variablen [i] = Variablen [i] * 2 + 1, z. – Dschoni

Verwandte Themen