Ich habe eine 300 x 4 Matrix namens X von der Odeint-Funktion erstellt. In der zweiten Spalte sind y-Werte und ich möchte die Matrix abschneiden, wenn der y-Wert unter 0 sinkt. Als ersten Schritt habe ich versucht, eine Funktion zu erstellen, die die zweite Spalte lesen und die Zeilennummer ausspucken würde Säule zuerst taucht unter 0.Python - Ausschneiden eines Arrays an einem bestimmten Punkt basierend auf dem Wert in Zeile
X = odeint(func, X0, t)
Yval = X[:,1]
def indexer():
i = 0
if Yval[i] > 0:
i = i + 1
if Yval[i] < 0:
return i
Was nicht funktioniert und vom Konzept her weiß ich, das ist falsch, ich konnte einfach nicht glauben, der einen anderen Weg, dies zu tun. Gibt es eine Möglichkeit, alle Zeilen auszuschneiden, die den ersten < 0 y-Wert enthalten und ihm folgen?
Das ist meine gesamte Code:
import numpy as np
import math
from scipy.integrate import odeint
g = 9.8
theta = (45 * math.pi)/180
v0 = 10.0
k = 0.3
x0 = 0
y0 = 0
vx0 = v0*math.sin(theta)
vy0 = v0*math.cos(theta)
def func(i_state,time):
f = np.zeros(4)
f[0] = i_state[2]
f[1] = i_state[3]
f[2] = -k*(f[0]**2 + f[1]**2)**(.5)*f[0]
f[3] = -g - k*(f[0]**2 + f[1]**2)**(.5)*f[1]
return f
X0 = [x0, y0, vx0, vy0]
t0 = 0
tf = 3
timestep = 0.01
nsteps = (tf - t0)/timestep
t = np.linspace(t0, tf, num = nsteps)
X = odeint(func, X0, t)
Yval = X[:,1]
def indexer():
i = 0
if Yval[i] > 0:
i = i + 1
if Yval[i] < 0:
return i
Können Sie bitte einige Beispieldaten hinzufügen? – reubano
@ reubano - habe meinen gesamten obigen Code hinzugefügt, der das Array/die Matrix erzeugt. Danke – Edna
lassen Sie mich sehen, wenn das ist, was Sie meinen, sagen Sie haben die Daten: (1,1,1,1), (2,2,2,2), (3,3,3,3), (4, -1,4,4), (5,5,5,5) Sie möchten nur (1,1,1,1), (2,2,2,2) , (3,3,3,3) –