2 Stimmen

numpy arange mit mehreren Intervallen

Ich habe ein Numpy-Array, das mehrere x-Intervalle einer Funktion darstellt:

In [137]: x_foo
Out[137]: 
array([211, 212, 213, 214, 215, 216, 217, 218, 940, 941, 942, 943, 944,
       945, 946, 947, 948, 949, 950])

wie man sieht, gibt es in x_foo zwei intervalle: eines von 211 bis 218 und eines von 940 bis 950. das sind intervalle, die ich mit scipy interpolieren möchte. dazu muss ich die abstände anpassen, z.B. "211.0 211.1 211.2 ...", was man normalerweise auch machen würde:

arange( x_foo[0], x_foo[-1], 0.1 )

im Falle von mehreren Intervallen, ist dies nicht möglich. so hier meine Frage: gibt es eine Numpy-thonischen Weg, dies in Array-Stil zu tun? oder muss ich eine Funktion schreiben, die Schleifen über das gesamte Array und Split, wenn die Differenz >1 ist?

Danke!

3voto

Justin Peel Punkte 46114
import numpy as np
x = np.array([211, 212, 213, 214, 215, 216, 217, 218, 940, 941, 942, 943, 944,
   945, 946, 947, 948, 949, 950])
ind = np.where((x[1:] - x[:-1]) > 1)[0]

gibt Ihnen den Index für das Element in x, das gleich 218 ist. Dann sind die beiden Bereiche, die Sie wollen:

np.arange(x[0],x[ind],0.1)

y

np.arange(x[ind+1],x[-1],0.1)

1voto

denis Punkte 20177
np.r_[ 211:218+1, 940:950+1 ]
array([211, 212, 213, 214, 215, 216, 217, 218, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950])

r_[] macht eine Zeile aus Skalaren, Bereichen, Arrays, Listen, Tupeln ...; Ich schätze r_ ist die Abkürzung für row . Für Doc, siehe np.r_? in Ipython.
(Python behandelt 211:218 innerhalb eckiger Klammern, aber nicht rund, daher r_[] no () ).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X