<br><br><div class="gmail_quote">On Mon, Jul 30, 2012 at 6:33 PM, Wolfgang Draxinger <span dir="ltr">&lt;<a href="mailto:Wolfgang.Draxinger@physik.uni-muenchen.de" target="_blank">Wolfgang.Draxinger@physik.uni-muenchen.de</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
first my apologies for crossposting this to two maillists, but as both<br>
projects are affected I think this is in order.<br>
<br>
Like the subject says I encountered some undesired behavior in the<br>
interaction of SciPy with NumPy.<br>
<br>
Using the &quot;old&quot; SciPy version 0.9.0 everything works fine and smooth.<br>
But upgrading to SciPy-0.10.1 triggers some ValueError in<br>
numpy.histogram2d of NumPy-1.6.2 when executing one of my programs.<br>
<br>
I developed a numerical evaluation system for our detectors here. One of<br>
the key operations is determining the distribution of some 2-dimensional<br>
variable space based on the values found in the image delivered by the<br>
detector, where each pixel has associated values for the target<br>
variables. This goes something like the following<br>
<br>
   ABdist, binsA, binsB = numpy.histogram2d(<br>
       B_yz.ravel(),<br>
       A_yz.ravel(),<br>
       [B_bins, A_bins],<br>
       weights=image.ravel() )<br>
<br>
The bins parameter can be either [int, int] or [array, array], that<br>
makes no difference in the outcome.<br>
<br>
The mappings A_yz and B_yz are created using<br>
scipy.interpolate.griddata. We have a list of pairs of pairs which are<br>
determined by measurement. Basically in the calibration step we vary<br>
variables A,B and store at which Y,Z we get the corresponding signal.<br>
So essentially this is a (A,B) -&gt; (Y,Z) mapping. In the region of<br>
interest is has a bijective subset that&#39;s also smooth. However the<br>
original data also contains areas where (Y,Z) has no corresponding<br>
(A,B) or where multiple (A,B) map to the same (Y,Z); like said, those<br>
lie outside the RoI. For our measurements we need to reverse this<br>
process, i.e. we want to do (Y,Z) -&gt; (A,B).<br>
<br>
So I use griddata to evaluate a discrete reversal for this<br>
mapping, of the same dimensions that the to be evaluated image has:<br>
<br>
   gry, grz = numpy.mgrid[self.y_lim[0]:self.y_lim[1]:self.y_res*1j,<br>
                          self.z_lim[0]:self.z_lim[1]:self.z_res*1j]<br>
   # for whatever reason I have to do the following<br>
   # assigning to evalgrid directly breaks the program.<br>
   evalgrid = (gry, grz)<br>
<br>
   points = (Y.ravel(), Z.ravel())<br>
<br>
   def gd(a):<br>
       return scinp.griddata(<br>
           points,<br>
           a.ravel(),<br>
           evalgrid,<br>
           method=&#39;cubic&#39; )<br>
<br>
   A_yz = gd(A)<br>
   B_yz = gd(B)<br>
<br>
where A,B,Y,Z have the same dimensions and are the ordered lists/arrays<br>
of the scalar values of the two sets mapped between. As you can see,<br>
this approach does also involve the elements of the sets, which are not<br>
mapped bijectively. As lying outside the convex boundary or not being<br>
properly interpolatable they should receive the fill value.<br>
<br>
As long as I stay with SciPy-0.9.0 everything works fine. However after<br>
upgrading to SciPy-0.10.1 the histogram2d step fails with a ValueError.<br>
The version of NumPy is 1.6.2 for both cases.<br>
<br>
/usr/lib64/python2.7/site-packages/numpy/ma/core.py:772: RuntimeWarning: invalid value encountered in absolute<br>
  return umath.absolute(a) * self.tolerance &gt;= umath.absolute(b)<br>
Traceback (most recent call last):<br>
  File &quot;./ephi.py&quot;, line 71, in &lt;module&gt;<br>
    ABdist, binsA, binsB = numpy.histogram2d(B_yz.ravel(), A_yz.ravel(), [B_bins, A_bins], weights=image.ravel())<br>
  File &quot;/usr/lib64/python2.7/site-packages/numpy/lib/twodim_base.py&quot;, line 615, in histogram2d<br>
    hist, edges = histogramdd([x,y], bins, range, normed, weights)<br>
  File &quot;/usr/lib64/python2.7/site-packages/numpy/lib/function_base.py&quot;, line 357, in histogramdd<br>
    decimal = int(-log10(mindiff)) + 6<br>
ValueError: cannot convert float NaN to integer<br>
<br>
Any ideas on this?<br>
</blockquote></div><br>Looks to me like the issue only has to do with a change in griddata, and nothing with histogram2d. The return values from griddata must be different. <br><br>I suggest that you compare the return values from griddata for 0.9.0 and 0.10.1 with your input data, then try to reduce that comparison to a small self-contained example that shows the difference. This will allow us to debug the issue further.<br>
<br>Cheers,<br>Ralf<br><br>