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 …

  • Finden Sie heraus, ob Sellerie-Task existiert
  • Wie bekomme ich die aktuelle CPU- und RAM-Nutzung in Python?
  • Wie stelle ich einen Jabber-Status mit python-xmpp ein?
  • Update-Status Facebook mit Python
  • 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.