Numpy gcd函数

2024-09-22 20:26:51 发布

您现在位置:Python中文网/ 问答频道 /正文

numpy在它的模块结构中是否有一个gcd函数?

我知道fractions.gcd,但我认为numpy等价的数据类型可能更快,对numpy数据类型的处理也更好。

我在google上除了这个似乎过时的link之外什么都找不到,我不知道如何访问它建议的_gcd函数。

天真的尝试:

np.gcd
np.euclid

对我不起作用。。。


Tags: 模块函数numpynpgooglelink结构建议
3条回答

你可以自己写:

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

下面是测试结果和速度的代码:

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

任何使用Python3.5的人的公共服务公告

from math import gcd
gcd(2, 4)

如果你想自己写一行:

def gcd(a: int, b: int): return gcd(b, a % b) if b else a

似乎在numpy中还没有gcd函数。但是,有一个gcd function in fractions module。如果需要对numpy数组执行gcd,可以使用它构建ufunc

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

相关问题 更多 >