[Numpy-discussion] Problem with concatenate and object arrays
oliphant.travis at ieee.org
Thu Sep 7 02:03:03 CDT 2006
Charles R Harris wrote:
> OK. I do have a couple of questions. Let me insert the docs for array
> and asarray :
> """array(object, dtype=None, copy=1,order=None, subok=0,ndmin=0)
> Return an array from object with the specified date-type.
> 1) Is it true that array doesn't always return a copy except by
> default? asarray says it contrasts with array in this regard. Maybe
> copy=0 should be deprecated.
array is the main creation function. It is a loose wrapper around
PyArray_fromAny. copy=0 means don't copy unless you have to.
> 2) Is asarray is basically array with copy=0?
> 3) Is asanyarray basically array with copy=0 and subok=1?
> 4) Is there some sort of precedence table for conversions? To me it
> looks like the most deeply nested lists are converted to arrays first,
> numeric if they contain all numeric types, object otherwise. I assume
> the algorithm then ascends up through the hierarchy like traversing a
> binary tree in postorder?
I'm not sure I understand what you mean. The discover-depth and
discover-dimensions algorithm figures out what the shape should be and
then recursive PySequence_GetItem and PySequence_SetItem is used to copy
the information over to the ndarray from the nested sequence.
> 5) All nesting must be to the same depth and the deepest nested items
> must have the same length.
Yes, there are routines discover_depth and discover_dimensions that are
the actual algorithm used. These are adapted from Numeric.
> 6) How is the difference between lists and "lists" determined, i.e.,
> In : array([list([1,2,3]),list([1,2])], dtype = object)
> Out: array([[1, 2, 3], [1, 2]], dtype=object)
> In : array([array([1,2,3]),array([1,2])], dtype = object)
> Out: array([[1 2 3], [1 2]], dtype=object)
> In : array([1,2,3],[1,2]], dtype = object)
> File "<ipython console>", line 1
> array([1,2,3],[1,2]], dtype = object)
> SyntaxError: invalid syntax
I think this is just due to a missing [ in In . There is no
semantic difference between
list([1,2,3]) and [1,2,3] (NumPy will see those things as exactly the
> Is the difference that list(...) and array(...) are passed as
> functions (lazy evaluation), but a list is just a list?
There is nothing like "lazy evaluation" going on. array([1,2,3]) is
evaluated returning an object and array([1,2]) is evaluated returning an
object and then the two are put into another object array. Equivalent code
a = array([1,2,3])
b = array([1,2])
c = array([a,b],dtype=object)
Thanks for all your help with documentation. It is very-much appreciated.
More information about the Numpy-discussion