[Numpy-discussion] Multiple Boolean Operations
Andrea Gavana
andrea.gavana@gmail....
Thu May 22 17:22:21 CDT 2008
Hi Stefan,
On Thu, May 22, 2008 at 10:23 PM, Stéfan van der Walt wrote:
> Hi Andrea
>
> 2008/5/22 Andrea Gavana <andrea.gavana@gmail.com>:
>> By the way, about the solution Francesc posted:
>>
>> xyzReq = (xCent >= xMin) & (xCent <= xMax) & \
>> (yCent >= yMin) & (yCent <= yMax) & \
>> (zCent >= zMin) & (zCent <= zMax)
>>
>> xyzReq = numpy.nonzero(xyzReq)[0]
>>
>> Do you think is there any chance that a C extension (or something
>> similar) could be faster? Or something else using weave? I understand
>> that this solution is already highly optimized as it uses the power of
>> numpy with the logic operations in Python, but I was wondering if I
>> can make it any faster: on my PC, the algorithm runs in 0.01 seconds,
>> more or less, for 150,000 cells, but today I encountered a case in
>> which I had 10800 sub-grids... 10800*0.01 is close to 2 minutes :-(
>> Otherwise, I will try and implement it in Fortran and wrap it with
>> f2py, assuming I am able to do it correctly and the overhead of
>> calling an external extension is not killing the execution time.
>
> I wrote a quick proof of concept (no guarantees). You can find it
> here (download using bzr, http://bazaar-vcs.org, or just grab the
> files with your web browser):
>
> https://code.launchpad.net/~stefanv/+junk/xyz
>
> 1. Install Cython if you haven't already
> 2. Run "python setup.py build_ext -i" to build the C extension
> 3. Use the code, e.g.,
>
> import xyz
> out = xyz.filter(array([1.0, 2.0, 3.0]), 2, 5,
> array([2.0, 4.0, 6.0]), 2, 4,
> array([-1.0, -2.0, -4.0]), -3, -2)
>
> In the above case, out is [False, True, False].
Thank you very much for this! I am going to try it and time it,
comparing it with the other implementations. I think I need to study a
bit your code as I know almost nothing about Cython :-D
Thank you!
Andrea.
"Imagination Is The Only Weapon In The War Against Reality."
http://xoomer.alice.it/infinity77/
More information about the Numpy-discussion
mailing list