Re: numpy.frombuffer != unpack() ??

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Gary Herron

    Re: numpy.frombuffer != unpack() ??

    Marlin Rowley wrote:
    All:
    >
    Say I have an array:
    >
    a = (['rrrrggggbbbbaa aa'],['rrrrggggbbbbaa aa'])
    >
    How do I make it so that I now have:
    >
    starting with first element (a[0])
    new_arr[0] = 'r'
    new_arr[1] = 'g'
    new_arr[2] = 'b'
    new_arr[3] = 'a'
    new_arr[4] = 'r'
    .....
    >
    continuing "through" a[1] with the same new_arr
    new_arr[N] = 'r'
    new_arr[N+1] = 'g'
    ....
    >
    -M
    Numpy can do this for you. First, do you really mean the array to
    contain lists of one string each? If so:
    >>import numpy
    >>a = (['rrrrggggbbbbaa aa'],['rrrrggggbbbbaa aa'])
    >>b = numpy.frombuffe r(''.join(sum(a ,[])),dtype='S1') # Kind of a
    kludge here
    >>b
    array(['r', 'r', 'r', 'r', 'g', 'g', 'g', 'g', 'b', 'b', 'b', 'b', 'a',
    'a', 'a', 'a', 'r', 'r', 'r', 'r', 'g', 'g', 'g', 'g', 'b', 'b',
    'b', 'b', 'a', 'a', 'a', 'a'],
    dtype='|S1')
    >>b.shape=(2,4, 4)
    >>b
    array([[['r', 'r', 'r', 'r'],
    ['g', 'g', 'g', 'g'],
    ['b', 'b', 'b', 'b'],
    ['a', 'a', 'a', 'a']],

    [['r', 'r', 'r', 'r'],
    ['g', 'g', 'g', 'g'],
    ['b', 'b', 'b', 'b'],
    ['a', 'a', 'a', 'a']]],
    dtype='|S1')
    >>c = b.transpose((2, 0,1))
    >>c
    array([[['r', 'g', 'b', 'a'],
    ['r', 'g', 'b', 'a']],

    [['r', 'g', 'b', 'a'],
    ['r', 'g', 'b', 'a']],

    [['r', 'g', 'b', 'a'],
    ['r', 'g', 'b', 'a']],

    [['r', 'g', 'b', 'a'],
    ['r', 'g', 'b', 'a']]],
    dtype='|S1')
    >>d=c.copy() # To make it contiguous
    >>d.shape = (32,)
    >>d
    array(['r', 'g', 'b', 'a', 'r', 'g', 'b', 'a', 'r', 'g', 'b', 'a', 'r',
    'g', 'b', 'a', 'r', 'g', 'b', 'a', 'r', 'g', 'b', 'a', 'r', 'g',
    'b', 'a', 'r', 'g', 'b', 'a'],
    dtype='|S1')

    Done. Cool no?

    Gary Herron
    >
    >
    >
    >
    ------------------------------------------------------------------------
    From: marlin_rowley@h otmail.com
    To: robert.kern@gma il.com; python-list@python.org
    Subject: RE: numpy.frombuffe r != unpack() ??
    Date: Fri, 16 May 2008 17:31:30 -0500
    >
    Thank you! That solved it!
    >
    -M
    >
    >
    ------------------------------------------------------------------------
    >
    To: python-list@python.org
    From: robert.kern@gma il.com
    Subject: Re: numpy.frombuffe r != unpack() ??
    Date: Fri, 16 May 2008 17:25:00 -0500
    >
    Marlin Rowley wrote:
    All:

    I'm getting different floating point values when I use numpy
    vs. unpack().

    frgba = numpy.frombuffe r(<string of bytes>, dtype=float32)
    buffer = unpack("!f", byte)

    frgba[0] != buffer[0]

    why? This is forcing me use the unpack() function since it's
    giving me
    the correct values. What am I doing wrong?
    >
    Endianness, perhaps? '!' specifies big-endian data (an alias for
    '>'). Most
    likely, you are on a little-endian platform. All of the dtypes
    in numpy default
    to the native-endianness unless specified. If you want to read
    big-endian data
    using numpy, do this:
    >
    frgba = numpy.frombuffe r(<string of bytes>, dtype='>f')
    >
    If you have any more problems with numpy, please join us on the
    numpy mailing
    list. When reporting problems, please try to provide a small but
    complete
    snippet of self-contained code, the output that you got, and
    explain the output
    that you expected to get. Thank you.
    >

    >
    --
    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
    >
    --
    http://mail.python.org/mailman/listinfo/python-list
    >
    >
    ------------------------------------------------------------------------
    E-mail for the greater good. Join the i’m Initiative from
    Microsoft.
    <http://im.live.com/Messenger/IM/Join/Default.aspx?so urce=EML_WL_%20 GreaterGood>
    >
    >
    >
    ------------------------------------------------------------------------
    E-mail for the greater good. Join the i’m Initiative from Microsoft.
    <http://im.live.com/Messenger/IM/Join/Default.aspx?so urce=EML_WL_%20 GreaterGood>
    >
    ------------------------------------------------------------------------
    >
    --
    http://mail.python.org/mailman/listinfo/python-list
Working...