On Wed, Mar 9, 2011 at 8:13 PM, Ralf Gommers <ralf.gomm...@googlemail.com> wrote: > On Wed, Mar 9, 2011 at 11:24 PM, Skipper Seabold <jsseab...@gmail.com> wrote: >> On Tue, Mar 8, 2011 at 8:08 PM, Skipper Seabold <jsseab...@gmail.com> wrote: >>> On Sun, Mar 6, 2011 at 11:12 PM, Ralf Gommers >>> <ralf.gomm...@googlemail.com> wrote: >>>> On Sun, Mar 6, 2011 at 1:10 AM, Skipper Seabold <jsseab...@gmail.com> >>>> wrote: >>>>> On Sat, Mar 5, 2011 at 9:28 AM, Ralf Gommers >>>>> <ralf.gomm...@googlemail.com> wrote: >>>>>> On Sat, Mar 5, 2011 at 8:09 AM, Russell E. Owen <ro...@uw.edu> 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[0]? >>>>>>> >>>>>>> >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 >>>>>>> query. >>>>>>> >>>>> >>>>> 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. >>>>> >>>>> http://docs.scipy.org/numpy/docs/numpy.doc.structured_arrays/ >>>> >>>> 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. >>>>> >>>>> http://thread.gmane.org/gmane.comp.python.numeric.general/30793/focus=30793 >>>>> >>>>> 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[0] = (10,20) >>>>>>> arr[0] >>>> (10.0, 20.0) >>>> >>>>>>> arr[0] = np.array([10,20]) # no exception, but garbage out >>>>>>> arr[0] >>>> (4.2439915824246103e-313, 0.0) >>>> >>> >>> This is a casting issue. Your array is an integer array. You can >>> assign with an array. >>> >>> arr = np.zeros((5,), dtype=[('var1','f8'),('var2','f8')]) >>> arr[0] = np.array([10.0,20]) >>> arr[0] >>> (10.0, 20.0) >>> >> >> FYI, I fixed the docs to reflect this. > > Thanks, the doc is accurate now. Although I'm not sure we want to > document a bug (which I'm still sure it is) like that without making > clear it it is a bug. > >> I know numpy is already pretty verbose by default, but should the >> integer case throw up a warning similar to casting from complex to >> real? > > Please no, that will be very annoying. Plus it's much better defined > then complex -> real. >
I assume this is the same thing x = np.array([1.5]) x.view(int) array([4609434218613702656]) x = np.array([1]) x.view(float) array([ 4.94065646e-324]) I've been bit by this before, so I know not to do it, but I think it would be nice if it threw up a "don't try do that!". Skipper _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion