Clip Array

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
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Hallo, ich habe eine Frage und zwar habe ich ein array:

Code: Alles auswählen

array([[  6.82666667e+02,   2.05401952e+00],
       [  3.41333333e+02,   1.76906841e+00],
       [  2.27555556e+02,   1.89216345e+00],
       [  3.33659172e-01,   9.78381385e-07],
       [  3.33496173e-01,   8.69459804e-07],
       [  3.33333333e-01,   3.00554987e-07]])
Und nun möchte ich das in der ersten Spalte des array nach einem min = 1 und einem max = 10 gesucht wird und die Werte von Spalte eins die zwischen min und max liegen mit den dazugehörigen Werten aus Spalte zwei ausgegeben werden. Kann mir jemand helfen? Hab es mit

Code: Alles auswählen

np.clip
()
versucht. Hat aber nicht geklappt.
Sirius3
User
Beiträge: 17745
Registriert: Sonntag 21. Oktober 2012, 17:20

@Lienz20013: das Stichwort heißt logische Indizierung: (arr[:,0]>1) & (arr[:,0]<10).
Zuletzt geändert von Sirius3 am Dienstag 10. Februar 2015, 10:30, insgesamt 1-mal geändert.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Code: Alles auswählen

import numpy as np
data = np.array([[  6.82666667e+02,   2.05401952e+00],
       [  3.41333333e+02,   1.76906841e+00],
       [  2.27555556e+02,   1.89216345e+00],
       [  3.33659172e-01,   9.78381385e-07],
       [  3.33496173e-01,   8.69459804e-07],
       [  3.33333333e-01,   3.00554987e-07]])

x = data[:,0]
y = data[:,1]

subset = np.logical_and(1<=x, x<=500)

x2 = x[subset]
y2 = y[subset]

print(x2)
print(y2)
a fool with a tool is still a fool, www.magben.de, YouTube
Sirius3
User
Beiträge: 17745
Registriert: Sonntag 21. Oktober 2012, 17:20

@MagBen: Dein subset ist kein Sub-Set sondern eine Maske, ein Vektor mit boolschen Werten. Auch würde ich das Array nicht unnötigerweise trennen, was dann auf folgendes hinausläuft:

Code: Alles auswählen

import numpy as np
data = np.array([[  6.82666667e+02,   2.05401952e+00],
       [  3.41333333e+02,   1.76906841e+00],
       [  2.27555556e+02,   1.89216345e+00],
       [  3.33659172e-01,   9.78381385e-07],
       [  3.33496173e-01,   8.69459804e-07],
       [  3.33333333e-01,   3.00554987e-07]])
 
x = data[:, 0]
mask = (1 <= x) & (x <= 500)
print data[mask, :]
Lienz20013
User
Beiträge: 88
Registriert: Freitag 26. September 2014, 14:42

Cool danke jetzt vieleicht noch was anderes. Wie kann ich das was ich heir widerholt in eine Schleife schreiben:

Code: Alles auswählen

f = data[:, 0]
mask1 = (23.92 <= f) & (f <= 1196) 
mask2 = (0.01 <= f) & (f <= 23.92)

LDS1 = data[mask1, :]
LDS2 = data[mask2, :]

#Part 1
logx,logy = np.log(LDS1[:,0]),np.log(LDS1[:,1])
coeffs1 = np.polyfit(logx,logy,deg=1)                                         
poly = np.poly1d(coeffs1)                                                   
yfit = lambda f_new: np.exp(poly(np.log(LDS1[:,0])))
plt.loglog(LDS1[:,0],yfit(LDS1[:,0]),'r-',zorder=4)

#Part 2
logx,logy = np.log(LDS2[:,0]),np.log(LDS2[:,1])
coeffs2 = np.polyfit(logx,logy,deg=1)                                         
poly = np.poly1d(coeffs2)                                                   
yfit = lambda f_new: np.exp(poly(np.log(LDS2[:,0])))
plt.loglog(LDS2[:,0],yfit(LDS2[:,0]),'r-',zorder=4)
Irgendwie so oder:

Code: Alles auswählen

for part in range(1,3):
aber wie drücke ich z.B LDS 1 aus?
BlackJack

@Lienz20013: Die Schleife müsste über die Werte gehen die sich ändern, also die Grenzen für die Masken wenn ich das auf die Schnelle richtig sehe. Also so etwas wie ``for low, high in [(23.92, 1196), (0.01, 23.92)]:``.

Bei `mask1` und `mask2` scheinen die Operationen in der ”Kombination” keinen Sinn machen.
Antworten