[SciPy-dev] Should ndimage.measurements.* should return lists if index is a list?

josef.pktd at gmail.com josef.pktd at gmail.com
Sat Apr 18 22:50:14 EDT 2009


On Sat, Apr 18, 2009 at 10:21 PM, Thouis (Ray) Jones
<thouis at broad.mit.edu> wrote:
> I don't believe so.  I considered that, but there have to be some
> changes made to the C code to handle empty lists and better error
> checking, so figured I'd keep most of the changes in the same file.
>
> Each of the functions calling statistics() could wrap it with
> something that does the right thing with the return value given the
> type of index().  Let me know if you think that would be cleaner.
>
> Ray
>
> On Sat, Apr 18, 2009 at 20:16, Zachary Pincus <zachary.pincus at yale.edu> wrote:
>> I'm looking over the patch currently, but let me ask a quick question
>> first: is there a performance (or other) reason to not just do the
>> list-wrapping/unwrapping thing in Python, rather than in the C code?
>>
>> Zach
>>
>>
>>
>>
>> On Apr 18, 2009, at 7:28 PM, Thouis (Ray) Jones wrote:
>>
>>> My last patch did not do the right thing for ndimage.extrema(), which
>>> needs to return 4 values with the same semantics.  I've attached an
>>> addendum.
>>>
>>> Ray Jones
>>>
>>>
>>> On Sat, Apr 18, 2009 at 16:47, Thouis (Ray) Jones <thouis at broad.mit.edu
>>> > wrote:
>>>> Here's a first attempt at a patch.  It fixes the corner case of a
>>>> single index to match the index type (scalar for scalar, list for
>>>> single element sequence), also the case of index=[] to return [] for
>>>> any measurement.  Finally, it improves type checking of the index
>>>> type, which was only being checked for sum() and not any of the other
>>>> measurements (?).
>>>>
>>>> Zach, would you mind reviewing?  If it looks good, I'll add some
>>>> tests
>>>> for the new functionality and submit a patch via trac.
>>>>
>>>> Ray
>>>>
>>>> On Fri, Apr 17, 2009 at 22:06, Zachary Pincus <zachary.pincus at yale.edu
>>>> > wrote:
>>>>>> Current behavior:
>>>>>>>>> from scipy import ndimage
>>>>>>>>> ndimage.maximum([[1,2], [3,4]], [[1,0],[0,2]], index=[1,2])
>>>>>> [1.0, 4.0]
>>>>>>>>> ndimage.maximum([[1,2], [3,4]], [[1,0],[0,2]], index=[1])
>>>>>> 1.0
>>>>>>>>> ndimage.maximum([[1,2], [3,4]], [[1,0],[0,2]], index=1)
>>>>>> 1.0
>>>>>>
>>>>>> I think the second result should be [1.0].  We're using the ndimage
>>>>>> code for image processing, and have to wrap the measurement
>>>>>> functions
>>>>>> to make the code general for the case where there is only one
>>>>>> object
>>>>>> in the image.
>>>>>
>>>>> I've run into this too, and had the same thought. It's such a
>>>>> corner-
>>>>> case that it doesn't seem like gratuitous API-breakage to make this
>>>>> fix...


If I understand correctly what you are doing, then this is related to tickets
http://projects.scipy.org/scipy/ticket/412 and 868.

Are you able to check these? It would be good to get rid of some
segfaults in ndimage.

Thanks,
Josef



More information about the SciPy-Dev mailing list