Fügen Sie zwei numpy-Arrays hinzu, indem Sie den Ausdruck lamdify - pass als Funktionsargument verwenden

George

Ich habe diesen Code:

import numpy as np
import sympy
from sympy import symbols
from sympy.utilities.autowrap import ufuncify
from sympy.utilities.lambdify import lambdify


def test(expr,a,b):

    a_var, b_var = symbols("a b")
    #f = ufuncify((a_var, b_var), expr, backend='numpy')
    f = lambdify( (a_var, b_var), expr, 'numpy')
    return f(a_var, b_var)


a = np.array([2,3])
b = np.array([1,2])
expr = a + b

print(test(expr, a, b))

die mir geben:

../anaconda3/envs/python3/lib/python3.6/site-packages/sympy/core/sympify.py:282: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
  rational=rational) for x in a])

   File "<string>", line 1
 lambda _Dummy_52,_Dummy_53: ([3 5])                                
 SyntaxError: invalid syntax

Wenn ich das ufuncify benutze:

...

TypeError: unhashable type: 'numpy.ndarray'

During handling of the above exception, another exception occurred:
...

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

====== UPDATE ================

Eine Lösung, die ich gefunden habe, besteht darin, sie exprwie eine Zeichenfolge zu verwenden und dann innerhalb der Funktion Folgendes zu verwenden sympify:

data_a = np.array([2,3])
data_b = np.array([1,2])
expr = "data_a + data_b"


def test(expr,data_a, data_b):

        a, b = symbols("data_a data_b")
        expr = sympify(expr)
        f = lambdify( (a, b), expr, 'numpy')
        return f(data_a, data_b)

und ich nehme:

[3 5]

Aber wie kann ich vermeiden, den Ausdruck als Zeichenfolge zu verwenden?

sinken

lambdifykonvertiert SymPy-Ausdrücke in NumPy-Funktionen. Sie versuchen, ein NumPy-Array in eine NumPy-Funktion zu konvertieren. Die Argumente lambdifymüssen SymPy-Objekte sein.

Du willst so etwas wie

a_var, b_var = symbols("a b")
expr = a_var + b_var
f = lambdify((a_var, b_var), expr, 'numpy')

Sie werden dann bekommen

>>> a = np.array([2,3])
>>> b = np.array([1,2])
>>> f(a, b)
array([3, 5])

Der grundlegende Codefluss für lambdifyist SymPy Ausdruck => NumPy Funktion. Um die Dinge in Ihrem Kopf und in Ihrem Code klar zu halten, sollten Sie nur mit SymPy beginnen und die Ausdrücke so lange bearbeiten, bis Sie eine lambdifizierte Funktion haben. Verwenden Sie es dann mit Ihren NumPy-Daten. Beginnen Sie mit der Definition von Symbolnamen. Dann können Sie einen Ausdruck in Form dieser Symbole definieren, ohne eine Zeichenfolge zu verwenden (z. B. wie oben beschrieben). Sobald Sie einen Ausdruck und die Symbole haben, erstellen Sie eine lambdifizierte Funktion. Zu diesem Zeitpunkt übergeben Sie NumPy-Arrays an die Funktion. Ich empfehle, unterschiedliche Variablennamen für SymPy-Symbole / Ausdrücke und NumPy-Arrays zu verwenden, damit sie nicht verwechselt werden. Ich empfehle außerdem, für Symbole denselben Variablennamen wie für die Symbolnamen selbst zu verwenden, damit der Ausdruck beim Drucken genau so angezeigt wird, wie Sie ihn schreiben würden (z. B. unten, wenn Sie dies tun)print(expr)Sie werden bekommen a + b, was genau das ist, was Sie schreiben würden, um zu bekommen expr).

In Ihrem aktualisierten Beispiel können Sie verwenden

a, b = symbols("a b")
expr = a + b
f = lambdify((a, b), expr, 'numpy')

data_a = np.array([2,3])
data_b = np.array([1,2])
f(data_a, data_b)

Beachten Sie, wie ich mit dem Erstellen von SymPy-Symbolen und einem SymPy-Ausdruck aus diesen Symbolen beginne. Dann lambdifiziere ich es. Sobald es lambdifiziert ist, habe ich die lambdifizierte Funktion ( f). Zu diesem Zeitpunkt verwende ich SymPy überhaupt nicht mehr, sondern nur noch NumPy-Arrays (die Daten) und die Lambdified-Funktion f.

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv