[Numpy-discussion] Request for a bit more info on structured arrays in the "basics" page
Sun Mar 6 22:12:55 CST 2011
On Sun, Mar 6, 2011 at 1:10 AM, Skipper Seabold <email@example.com> wrote:
> On Sat, Mar 5, 2011 at 9:28 AM, Ralf Gommers
> <firstname.lastname@example.org> wrote:
>> On Sat, Mar 5, 2011 at 8:09 AM, Russell E. Owen <email@example.com> wrote:
>>> The page <http://docs.scipy.org/doc/numpy/user/basics.rec.html>
>>> gives a good introduction to structured arrays. However, it says nothing
>>> about how to set a particular element (all fields at once) from a
>>> collection of data.
>>> For instance:
>>> stArr = numpy.zeros([4,5], dtype=[("pos", float, (2,)), ("rot", float)])
>>> The question is how to set stArr?
>>> >From experimentation it appears that you can provide a tuple, but not a
>>> list. Hence the following works just fine (and that the tuple can
>>> contain a list):
>>> strArr[0,0] = ([1.0, 1.1], 2.0)
>>> but the following fails:
>>> strArr[0,0] = [[1.0, 1.1], 2.0]
>>> with an error:
>>> TypeError: expected a readable buffer object
>>> This is useful information if one is trying to initialize a structured
>>> array from a collection of data, such as that returned from a database
> I added a bit at the end here, though it is mentioned briefly above.
> Feel free to expand. It's a wiki. You just need edit rights.
Thanks, I'll make sure that goes in for 1.6.0.
>> I'm wondering if that's not a bug? If it's intentional then it is
>> certainly counterintuitive.
> This comes up from time to time.
> Perhaps an enhancement ticket could be filed? It doesn't sound trivial
> to implement.
I filed #1758.
You can also assign with an array which fails silently, certainly a bug:
>>> arr = np.zeros((5,), dtype=[('var1','f8'),('var2','f8')])
>>> arr['var1'] = np.arange(5)
>>> arr = (10,20)
>>> arr = np.array([10,20]) # no exception, but garbage out
More information about the NumPy-Discussion