It looks like numpy.void does not properly implement __hash__:

In [35]: arr[0]['quantize'] == arr[1]['quantize']
Out[35]: True

In [34]: hash(arr[0]['quantize']) == hash(arr[1]['quantize'])
Out[34]: False

I'm not familiar enough with this kind of data type to tell you if you are
using it as it should be used though. Maybe such data is not supposed to be
hashed (but then shouldn'it it raise an exception?).

-=- Olivier

2011/8/30 Neal Becker <[email protected]>

> I've encountered something weird about numpy.void.
>
> arr = np.empty ((len(results),), dtype=[('deltaf', float),
>                                        ('quantize', [('int', int), ('frac',
> int)])])
>
> for i,r in enumerate (results):
>    arr[i] = (r[0]['deltaf'],
>              tuple(r[0]['quantize_mf']))
>
>
> from collections import defaultdict, namedtuple
> experiments = defaultdict(list)
>
> testcase = namedtuple ('testcase', ['quantize'])
>
> for e in arr:
>    experiments[testcase(e['quantize'])].append (e)
>
> Now it seems that when e['quantize'] is used as a dictionary key, equal
> values
> are not compared as equal:
>
> In [36]: experiments
> Out[36]: defaultdict(<type 'list'>, {testcase(quantize=(0, 0)): [(1.25, (0,
> 0))], testcase(quantize=(0, 0)): [(1.25, (0, 0))], testcase(quantize=(0,
> 0)):
> [(1.25, (0, 0))]})
>
> See, there are 3 'testcases' inserted, all with keys quantize=(0,0).
>
> In [37]: e['quantize']
> Out[37]: (0, 0)
>
> In [38]: type(e['quantize'])
> Out[38]: <type 'numpy.void'>
>
> There's something weird here.  If instead I do:
>
> for e in arr:
>    experiments[testcase(tuple(e['quantize']))].append (e)
>
> that is, convert e['quantize'] to a tuple before using it as a key, I get
> the
> expected behavior:
>
> In [40]: experiments
> Out[40]: defaultdict(<type 'list'>, {testcase(quantize=(0, 0)): [(1.25, (0,
> 0)),
> (1.25, (0, 0)), (1.25, (0, 0))]})
>
>
> _______________________________________________
> NumPy-Discussion mailing list
> [email protected]
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
_______________________________________________
NumPy-Discussion mailing list
[email protected]
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to