Why does numpy.array(a[0],b[0]) have this meaning?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Rick Giuly

    Why does numpy.array(a[0],b[0]) have this meaning?

    Hello All,

    Case 1
    This generates an error, which makes sense because the argument should
    be a list of numbers:
    numpy.array(10, 10)

    Case 2
    This does not generate an error and the result is an array with a
    single element:
    a = numpy.array([10])
    b = numpy.array([10])
    numpy.array(a[0],b[0])

    The only different I see here between the numpy.array call in the
    cases is that
    a[0] is a numpy int32
    10 is an int

    Why would this minor difference in integer types cause a totally
    different result for the two cases - or is something else causing the
    difference in results?


    -rick

    P.S.
    I am aware that numpy.array([10,10]) will work, but I'm trying to
    understand what is going on syntactically/semantically in the two
    cases above.


  • Marc 'BlackJack' Rintsch

    #2
    Re: Why does numpy.array(a[0],b[0]) have this meaning?

    On Sun, 02 Nov 2008 23:26:24 -0800, Rick Giuly wrote:
    Case 1
    This generates an error, which makes sense because the argument should
    be a list of numbers:
    numpy.array(10, 10)
    >
    Case 2
    This does not generate an error and the result is an array with a single
    element:
    a = numpy.array([10])
    b = numpy.array([10])
    numpy.array(a[0],b[0])
    >
    The only different I see here between the numpy.array call in the cases
    is that
    a[0] is a numpy int32
    10 is an int
    >
    Why would this minor difference in integer types cause a totally
    different result for the two cases - or is something else causing the
    difference in results?
    From the `numpy.array` docstring:

    Inputs:
    object - an array, any object exposing the array interface, any
    object whose __array__ method returns an array, or any
    (nested) sequence.

    And `numpy.int32` instances have an `__array__()` method:

    In [225]: ten = numpy.int32(10)

    In [226]: ten.__array__()
    Out[226]: array(10)

    Ciao,
    Marc 'BlackJack' Rintsch

    Comment

    • Robert Kern

      #3
      Re: Why does numpy.array(a[0],b[0]) have this meaning?

      Rick Giuly wrote:
      Hello All,
      >
      Case 1
      This generates an error, which makes sense because the argument should
      be a list of numbers:
      numpy.array(10, 10)
      >
      Case 2
      This does not generate an error and the result is an array with a
      single element:
      a = numpy.array([10])
      b = numpy.array([10])
      numpy.array(a[0],b[0])
      >
      The only different I see here between the numpy.array call in the
      cases is that
      a[0] is a numpy int32
      10 is an int
      >
      Why would this minor difference in integer types cause a totally
      different result for the two cases - or is something else causing the
      difference in results?
      The second argument is for a dtype. Basically, we'll accept anything there that
      can be coerced to a dtype using numpy.dtype(). For some reason, we have an
      undocumented feature where dtype(some_arra y_or_numpy_scal ar) will return the
      dtype of that value. Plain Python ints and floats don't have a dtype attached to
      them, so we raise an exception.

      If you have more numpy questions, please join us on the numpy-discussion mailing
      list.



      --
      Robert Kern

      "I have come to believe that the whole world is an enigma, a harmless enigma
      that is made terrible by our own mad attempt to interpret it as though it had
      an underlying truth."
      -- Umberto Eco

      Comment

      Working...