summaryrefslogtreecommitdiff
path: root/numpy/lib/function_base.py
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/lib/function_base.py')
-rw-r--r--numpy/lib/function_base.py27
1 files changed, 19 insertions, 8 deletions
diff --git a/numpy/lib/function_base.py b/numpy/lib/function_base.py
index c6db42ce4..af5a6e45c 100644
--- a/numpy/lib/function_base.py
+++ b/numpy/lib/function_base.py
@@ -593,7 +593,7 @@ def piecewise(x, condlist, funclist, *args, **kw):
not isinstance(condlist[0], (list, ndarray)) and x.ndim != 0):
condlist = [condlist]
- condlist = array(condlist, dtype=bool)
+ condlist = asarray(condlist, dtype=bool)
n = len(condlist)
if n == n2 - 1: # compute the "otherwise" condition.
@@ -671,11 +671,22 @@ def select(condlist, choicelist, default=0):
raise ValueError("select with an empty condition list is not possible")
choicelist = [np.asarray(choice) for choice in choicelist]
- choicelist.append(np.asarray(default))
+
+ try:
+ intermediate_dtype = np.result_type(*choicelist)
+ except TypeError as e:
+ msg = f'Choicelist elements do not have a common dtype: {e}'
+ raise TypeError(msg) from None
+ default_array = np.asarray(default)
+ choicelist.append(default_array)
# need to get the result type before broadcasting for correct scalar
# behaviour
- dtype = np.result_type(*choicelist)
+ try:
+ dtype = np.result_type(intermediate_dtype, default_array)
+ except TypeError as e:
+ msg = f'Choicelists and default value do not have a common dtype: {e}'
+ raise TypeError(msg) from None
# Convert conditions to arrays and broadcast conditions and choices
# as the shape is needed for the result. Doing it separately optimizes
@@ -2191,15 +2202,14 @@ class vectorize:
ufunc, otypes = self._get_ufunc_and_otypes(func=func, args=args)
# Convert args to object arrays first
- inputs = [array(a, copy=False, subok=True, dtype=object)
- for a in args]
+ inputs = [asanyarray(a, dtype=object) for a in args]
outputs = ufunc(*inputs)
if ufunc.nout == 1:
- res = array(outputs, copy=False, subok=True, dtype=otypes[0])
+ res = asanyarray(outputs, dtype=otypes[0])
else:
- res = tuple([array(x, copy=False, subok=True, dtype=t)
+ res = tuple([asanyarray(x, dtype=t)
for x, t in zip(outputs, otypes)])
return res
@@ -4277,7 +4287,8 @@ def meshgrid(*xi, copy=True, sparse=False, indexing='xy'):
>>> y = np.arange(-5, 5, 0.1)
>>> xx, yy = np.meshgrid(x, y, sparse=True)
>>> z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)
- >>> h = plt.contourf(x,y,z)
+ >>> h = plt.contourf(x, y, z)
+ >>> plt.axis('scaled')
>>> plt.show()
"""