Ich habe ein ndarray A, das Objekte des gleichen Typs, insbesondere verschiedene LinearNDInterpolator Objekte speichert. Nehmen wir zum Beispiel an, es ist nur 2:Mehrere Elemente von numpy Objekt-Array auswerten
>>> A
array([ <scipy.interpolate.interpnd.LinearNDInterpolator object at 0x7fe122adc750>,
<scipy.interpolate.interpnd.LinearNDInterpolator object at 0x7fe11daee590>], dtype=object)
Ich möchte in der Lage sein, zwei Dinge zu tun. Zunächst möchte ich alle Objekte in A an einem bestimmten Punkt bewerten und ein Array von A.Shape mit allen darin enthaltenen Werten zurückgeben. So etwas wie
>> A[[0,1]](1,1) =
array([ 1, 2])
Allerdings bekomme ich
TypeError: 'numpy.ndarray' object is not callable
Ist es möglich, das zu tun?
Zweitens möchte ich die Interpolationswerte ändern, ohne neue LinearNDInterpolator Objekte zu konstruieren (da die Knoten gleich bleiben). Das heißt, so etwas wie
A[[0,1]].values = B
wo B ein ndarray die neuen Werte für jedes Element von A.
für Ihre Anregungen Danke enthalten ist.
Hey, danke für deine Antwort. Das Problem ist, dass das Array n-dimensional ist, so dass es mühsam wäre, mit Listen oder Schleifen zu arbeiten. Mit numpy.frompyfunc gelang es mir, das erste zu tun: Ich kann eval_element = lambda array: array (1,1) definieren und dann eval_ufunc = np.frompyfunc (eval_element, 1, 1) definieren. eval_ufunc (A) gibt dann ein ndarray von jedem LinearND-Interpolator zurück, der bei (1,1) evaluiert wurde. – Tobias
Und ja, Sie können die Werte der Interpolatoren ändern, sie sind im Attribut A [0] .values gespeichert. – Tobias
'frompyfunc' wird unter geschätzt.Ich habe es in ein paar SO Antworten verwendet, z. http://stackoverflow.com/a/36297194/901925 – hpaulj