Numpy gcd Funktion

Ist numpy eine gcd Funktion irgendwo in seiner Struktur der Module?

Ich bin mir bewusst von fractions.gcd aber dachte, ein numpy Äquivalent vielleicht potenziell schneller und besser arbeiten mit numpy Datentypen.

Ich habe nicht in der Lage, etwas auf Google andere als diese Link, die scheint veraltet und ich weiß nicht, wie ich würde auf die _gcd Funktion, die es vorschlägt, existiert _gcd .

Naiv versuchend:

 np.gcd np.euclid 

Hat nicht für mich gearbeitet …

  • Python - Encoding String - Schwedische Buchstaben
  • Maske numpy Array basierend auf Index
  • Wie kann ich eine Drittanbieter-API bei der Ausführung von Django-Unit-Tests deaktivieren?
  • Wie man eine Funktion aus einer Zeichenfolge mit Python zu definieren
  • Scraping: Hinzufügen von Daten, die als Bild in CSV-Datei in python 3.5 gespeichert sind
  • Python Dispatcher Definitionen in einer Funktion
  • Matplotlib scatterplot x Achsenetiketten
  • Wie vereinheitliche ich eine Matrix?
  • 3 Solutions collect form web for “Numpy gcd Funktion”

    Sie können es selbst schreiben:

     def numpy_gcd(a, b): a, b = np.broadcast_arrays(a, b) a = a.copy() b = b.copy() pos = np.nonzero(b)[0] while len(pos) > 0: b2 = b[pos] a[pos], b[pos] = b2, a[pos] % b2 pos = pos[b[pos]!=0] return a 

    Hier ist der Code, um das Ergebnis und die Geschwindigkeit zu testen:

     In [181]: n = 2000 a = np.random.randint(100, 1000, n) b = np.random.randint(1, 100, n) al = a.tolist() bl = b.tolist() cl = zip(al, bl) from fractions import gcd g1 = numpy_gcd(a, b) g2 = [gcd(x, y) for x, y in cl] print np.all(g1 == g2) True In [182]: %timeit numpy_gcd(a, b) 1000 loops, best of 3: 721 us per loop In [183]: %timeit [gcd(x, y) for x, y in cl] 1000 loops, best of 3: 1.64 ms per loop 

    Es scheint, es gibt keine gcd Funktion noch in numpy . Allerdings gibt es eine gcd-Funktion in Fraktionen-Modul . Wenn du numpy auf numpy Arrays ausführen numpy , kannst du ein ufunc mit ihm aufbauen:

     gcd = numpy.frompyfunc(fractions.gcd, 2, 1) 

    Öffentliche Ankündigung für jedermann mit Python 3.5

     from math import gcd gcd(2, 4) 

    Und wenn du es selbst in einem Ein-Liner schreiben möchtest:

     def gcd(a: int, b: int): return gcd(b, a % b) if b else a 
    Python ist die beste Programmiersprache der Welt.