<p><br>
On Jan 14, 2013 11:31 AM, &quot;Jackson Li&quot; &lt;<a href="mailto:sonicboomed@yahoo.com">sonicboomed@yahoo.com</a>&gt; wrote:<br>
&gt;<br>
&gt; On Sun, Jan 13, 2013 at 10:44 AM, Joe Kington &lt;<a href="mailto:joferkington@gmail.com">joferkington@gmail.com</a>&gt;wrote:<br>
&gt;<br>
&gt; &gt; For what it&#39;s worth, the code you linked to is much slower for small<br>
&gt; &gt; sample sizes. It&#39;s only faster with large numbers (&gt;1e4) of points.  It<br>
&gt; &gt; also has a bit of a different use case than gaussian_kde.  It&#39;s only<br>
&gt; &gt; intended for making a regularly gridded KDE of a very large number of<br>
&gt; &gt; points on a relatively fine grid. It bins the data onto a regular grid and<br>
&gt; &gt; convolves it with an approriate gaussian kernel.  This is a reasonable<br>
&gt; &gt; approximation when you&#39;re dealing with a large number of points, but not so<br>
&gt; &gt; reasonable if you only have a handful.  Because the size of the gaussian<br>
&gt; &gt; kernel can be very large when the sample size is low, the convolution can<br>
&gt; &gt; be very slow for small sample sizes.  Also, If I recall correctly, there&#39;s<br>
&gt; &gt; a stray flipud that got left in there. You&#39;ll want to take it out.  (Also,<br>
&gt; &gt; while I think that got posted only a couple of years ago, I wrote it much<br>
&gt; &gt; longer ago than that... There&#39;s some less-than-ideal code in there...)<br>
&gt; &gt;<br>
&gt; &gt; However, are you sure that you want a kernel density estimate?  What<br>
&gt; &gt; you&#39;re describing sounds like interpolation, not a weighted KDE.<br>
&gt; &gt;<br>
&gt; &gt; As an example, a weighted KDE would be used when you wanted to show the<br>
&gt; &gt; density of point estimates while weighting it by error in the location of<br>
&gt; &gt; the point.<br>
&gt; &gt;<br>
&gt;<br>
&gt; &gt;&gt;I shouldn&#39;t have said &quot;error in the location of the point&quot;. I guess it<br>
&gt; &gt;&gt;would me more like &quot;confidence that the point exists&quot; or more accurately,<br>
&gt; &gt;&gt;&quot;magnitude of the point&quot;. Otherwise, the size of the Gaussian kernel would<br>
&gt; &gt;&gt;have to change depending on the data involved.<br>
&gt;<br>
&gt; &gt;&gt;As another (not exact) example, it can be handy when you want to sum some<br>
&gt; &gt;&gt;attribute over a map to yield a density estimate per-unit-area (e.g.<br>
&gt; &gt;&gt;population density, where you have populations of cities as your point<br>
&gt; &gt;&gt;measurements). In other words, if you want your temperature values to be<br>
&gt; &gt;&gt;summed-per-unit-area, then it&#39;s what you want. If you want to interpolate,<br>
&gt; &gt;&gt;it&#39;s not what you want.<br>
&gt;<br>
&gt;<br>
&gt; &gt;<br>
&gt; &gt; Instead, it sounds like you have a third variable that you want to make a<br>
&gt; &gt; continuous map of based on irregularly sampled points.  If so, have a look<br>
&gt; &gt; at scipy.interpolate (and particularly scipy.interpolate.Rbf).<br>
&gt; &gt;<br>
&gt; &gt; Hope that helps,<br>
&gt; &gt; -Joe<br>
&gt;<br>
&gt;<br>
&gt; Hi, <br>
&gt;<br>
&gt; Thanks for the quick reply. <br>
&gt;<br>
&gt; What you described for the population of cities is indeed what I want.<br>
&gt;<br>
&gt; I have several data points spread out randomly in XY space, and each data point has an independent third variable.<br>
&gt;<br>
&gt; (e.g. for 2 points very close to each other, one 50 and another 10, and all other data points are far away. </p>
<p>You&#39;re describing interpolation, for whatever it&#39;s worth. </p>
<p>You want to interpolate your &quot;z&quot; values, not determine the number of samples you have per unit area.</p>
<p>A KDE will give you &quot;bulls eyes&quot; around where you have data and the resulting values won&#39;t directly reflect the weight values you pass in. Instead, the values will mostly reflect where you have clusters of point measurements, modified by the localized sum of the weights. The exact value you get will depend on the covariance of your sampled point distribution.</p>

<p>Instead, you want a smooth surface that reflects your sampled z values.</p>
<p>Have a look at some of the examples involving scipy.interpolate.griddata or scipy.interpolate.Rbf. </p>
<p>The cookbook is a bit out of date, but take a look at the second example on this page: <a href="http://www.scipy.org/Cookbook/RadialBasisFunctions">http://www.scipy.org/Cookbook/RadialBasisFunctions</a> </p>
<p>Hope that helps!<br>
-Joe<br><br></p>
<p>&gt;<br>
&gt; --&gt; I would like that patch to get a value of 30 (average))<br>
&gt;<br>
&gt;<br>
&gt; Hence, I would like to obtain a XY graph showing the density estimate of the third variable. <br>
&gt;<br>
&gt; (if that patch is mostly high temperature on average, it should be &quot;red&quot;, and if it is empty or has a lot of low temperature data points, then it should be &quot;blue&quot;.)<br>
&gt;<br>
&gt;<br>
&gt; Thank<br>
&gt;  you!<br>
&gt;<br>
&gt; Jackson<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; SciPy-User mailing list<br>
&gt; <a href="mailto:SciPy-User@scipy.org">SciPy-User@scipy.org</a><br>
&gt; <a href="http://mail.scipy.org/mailman/listinfo/scipy-user">http://mail.scipy.org/mailman/listinfo/scipy-user</a><br>
&gt;<br>
</p>