[Numpy-discussion] Bus error when using flat on sliced, memmap'd array

chris farrow farrowch at gmail.com
Wed May 30 22:05:30 EDT 2012


Hi all,

I encountered an odd bug today that I wanted to bring to everyone's
attention. First the code:

>>> import numpy as np
>>> shape = (8, 8)
>>> dtype = np.dtype(np.uint8)
>>> image = np.random.randint(0, 256, shape).astype(dtype)
>>> image.tofile("test_image.bin")
>>> image = np.memmap("test_image.bin", dtype=dtype, shape=shape, mode='r')
>>> arr = image[::2,::2]
>>> np.sum(arr.flat)

On my system (numpy 1.6.1, git
revision 68538b74483009c2c2d1644ef00397014f95a696, on OSX, python 2.7.3
(32-bit)), this causes a bus error when run.

Here's what I've discovered so far about this:
- the bus error only occurs with mode 'r'
- the dimensionality of the array appears to be irrelevant
- if the array slice does not change the strides, the bus error does not
occur
- no 'arr.flat', no bus error
- Other aggregating functions (e.g. fmin.reduce) will induce the error
- Iterating over arr.flat will *not* cause a bus error

Based on this, I suspect the issue is with the C-facing side of the flat
iterator.

Enjoy!

Chris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20120530/c303d81d/attachment.html>


More information about the NumPy-Discussion mailing list