summaryrefslogtreecommitdiff
path: root/numpy/polynomial/polynomial.py
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/polynomial/polynomial.py')
-rw-r--r--numpy/polynomial/polynomial.py15
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):