Hi Zach,
I have a similar loop which I wrote using scipy.weave. This was my first
foray into weave, and I had to dig through the intermediate C sources to
find the macros that did the indexing in the way I make use of here, but
this snipped may get you started. There are 2 functions, which each do
the same thing, but one is in python, the other is in C. Note that this
is for a 3D histogram -- presumably you could remove B and C from this
example.
I'm sure there are better (more documented) ways to do this using weave
-- but I had this code written, it works, and it appears it may be
useful to you... (Sorry it's not documented, however.)
-Andrew
Zachary Pincus wrote:
> Hi,
>>>> How about a combination of sort, followed by searchsorted right/left
>> using the bin boundaries as keys? The difference of the two
>> resulting vectors is the bin value. Something like:
>>>> In [1]: data = arange(100)
>>>> In [2]: bins = [0,10,50,70,100]
>>>> In [3]: lind = data.searchsorted(bins)
>>>> In [4]: print lind[1:] - lind[:-1]
>> [10 40 20 30]
>>>> This won't be as fast as a c implementation, but at least avoids the
>> loop.
>>>> This is, more or less, what the current numpy.histogram does, no? I
> was hoping to avoid the O(n log n) sorting, because the image arrays
> are pretty big, and numpy.histogram doesn't get close to video rate
> for me...
>> Perhaps, though, some of the slow-down from numpy.histogram is from
> other overhead, and not the sorting. I'll try this, but I think I'll
> probably just have to write the c loop...
>> Zach
> _______________________________________________
> Numpy-discussion mailing list
>Numpy-discussion@scipy.org>http://projects.scipy.org/mailman/listinfo/numpy-discussion>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: for_zach.py
Type: text/x-python
Size: 719 bytes
Desc: not available
Url : http://projects.scipy.org/pipermail/numpy-discussion/attachments/20080417/16d6a414/attachment.py