diff options
Diffstat (limited to 'numpy/polynomial/polynomial.py')
-rw-r--r-- | numpy/polynomial/polynomial.py | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/numpy/polynomial/polynomial.py b/numpy/polynomial/polynomial.py index 207511216..c8894c68e 100644 --- a/numpy/polynomial/polynomial.py +++ b/numpy/polynomial/polynomial.py @@ -186,10 +186,17 @@ def polyfromroots(roots) : return np.ones(1) else : [roots] = pu.as_series([roots], trim=False) - prd = np.array([1], dtype=roots.dtype) - for r in roots: - prd = polysub(polymulx(prd), r*prd) - return prd + roots.sort() + n = len(roots) + p = [polyline(-r, 1) for r in roots] + while n > 1: + m = n//2 + tmp = [polymul(p[i], p[i+m]) for i in range(m)] + if n%2: + tmp[0] = polymul(tmp[0], p[-1]) + p = tmp + n = m + return p[0] def polyadd(c1, c2): |