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 <ndbeck...@gmail.com>

> 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
> NumPy-Discussion@scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to