[Numpy-discussion] Is this a bug in numpy.ma.reduce?
David Goldsmith
d.l.goldsmith at gmail.com
Mon Mar 8 13:17:59 EST 2010
On Mon, Mar 8, 2010 at 6:52 AM, Bruce Southey <bsouthey at gmail.com> wrote:
> On 03/08/2010 01:30 AM, David Goldsmith wrote:
>
> On Sun, Mar 7, 2010 at 4:41 AM, Friedrich Romstedt <
> friedrichromstedt at gmail.com> wrote:
>
>> I would like to stress the fact that imo this is maybe not ticket and not
>> a bug.
>>
>> The issue arises when calling a.max() or similar of empty arrays a, i.e.,
>> with:
>>
>> >>> 0 in a.shape
>> True
>>
>> Opposed to the .prod() of an empty array, such a .max() or .min()
>> cannot be defined, because the set is empty. So it's fully correct to
>> let such calls fail. Just the failure is a bit deep in numpy, and
>> only the traceback gives some hint what went wrong.
>>
>> I posted something similar also on the matplotlib-users list, sorry
>> for cross-posting thus.
>>
>
> Any suggestions, then, how to go about figuring out what's happening in my
> code that's causing this "feature" to manifest itself?
>
> DG
>
> Perhaps providing the code with specific versions of Python, numpy etc.
> would help.
>
> I would guess that aquarius_test.py has not correctly setup the necessary
> inputs (or has invalid inputs) required by matplotlib (which I have no
> knowledge about). Really you have to find if the _A in cmp.py used by
> 'self.norm.autoscale_None(self._A)' is valid. You may be missing a valid
> initialization step because the TypeError exception in autoscale_None ('You
> must first set_array for mappable') implies something need to be done first.
>
>
> Bruce
>
Python 2.5.4, Numpy 1.4.0, Matplotlib 0.99.0, Windows 32bit Vista Home
Premium SP2
# Code copyright 2010 by David Goldsmith
# Comments and unnecessaries edited for brevity
import numpy as N
import matplotlib as MPL
from matplotlib import pylab
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.cm as cm
J = complex(0,1); tol = 1e-6; maxiter = 20;
roots = (-2 + J/2, -1 + J, -0.5 + J/2, 0.5 + J, 1 + J/2, 2 + J, 2.5 + J/2,
-2 - J, -1 - J/2, -0.5 - J, 0.5 - J/2, 1 - J, 2 - J/2, 2.5 - J)
def ffp(z):
w, wp = (0J, 0J)
for root in roots:
z0 = z - root
w += N.sin(1/z0)
wp -= N.cos(1/z0)/(z0*z0)
return (w, wp)
def iter(z):
w, wp = ffp(z)
return z - w/wp
def find_root(z0):#, k, j):
count = 0
z1 = iter(z0)
if N.isnan(z1):
return N.complex64(N.inf)
while (N.abs(z1 - z0) > tol) and \
(count < maxiter):
count += 1
z0 = z1
z1 = iter(z0)
if N.abs(z1 - z0) > tol:
result = 0
else:
result = z1
return N.complex64(result)
w, h, DPI = (3.2, 2.0, 100)
fig = Figure(figsize=(w, h),
dpi=DPI,
frameon=False)
ax = fig.add_subplot(1,1,1)
canvas = FigureCanvas(fig)
nx, xmin, xmax = (int(w*DPI), -0.5, 0.5)
ny, ymin, ymax = (int(h*DPI), 0.6, 1.2)
X, xincr = N.linspace(xmin,xmax,nx,retstep=True)
Y, yincr = N.linspace(ymin,ymax,ny,retstep=True)
W = N.zeros((ny,nx), dtype=N.complex64)
for j in N.arange(nx):
if not (j%100): # report progress
print j
for k in N.arange(ny):
x, y = (X[j], Y[k])
z0 = x + J*y
W[k,j] = find_root(z0)#,k,j)
print N.argwhere(N.logical_not(N.isfinite(W.real)))
print N.argwhere(N.logical_not(N.isfinite(W.imag)))
W = W.T
argW = N.angle(W)
print N.argwhere(N.logical_not(N.isfinite(argW)))
cms = ("Blues",)# "Blues_r", "cool", "cool_r",
def all_ticks_off(ax):
ax.xaxis.set_major_locator(pylab.NullLocator())
ax.yaxis.set_major_locator(pylab.NullLocator())
for cmap_name in cms:
all_ticks_off(ax)
ax.hold(True)
for i in range(4):
for j in range(4):
part2plot = argW[j*ny/4:(j+1)*ny/4, i*nx/4:(i+1)*nx/4]
if N.any(N.logical_not(N.isfinite(part2plot))):
print i, j,
print N.argwhere(N.logical_not(N.isfinite(part2plot)))
extent = (i*nx/4, (i+1)*nx/4, (j+1)*ny/4, j*ny/4)
ax.imshow(part2plot, cmap_name, extent = extent)
ax.set_xlim(0, nx)
ax.set_ylim(0, ny)
canvas.print_figure('../../Data-Figures/Zodiac/Aquarius/'+ cmap_name +
'Aquarius_test.png', dpi=DPI)
# End Aquarius_test.png
DG
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20100308/898f941c/attachment.html>
More information about the NumPy-Discussion
mailing list