Skip to main content

numerical bytearray - extends bytearray into numpy-like, 2d array

Project description

numerical bytearray - extends bytearray into numpy-like, 2d array

REQUIRES PYTHON3.1

QUICK TEST: $ python3.1 setup.py build dev –quicktest

DESCRIPTION: numerical bytearray - extends bytearray into numpy-like, 2d array

RECENT CHANGELOG: 20091224 - modularized package - fix install issues - added sdist check 20091209 - improved documentation 20091205 - moved source code to c++ 20091116 - package integrated

DEMO USAGE:

>>> from numbytes import *
>>> ## subclass numbytes
>>> class numbytes2(numbytes): pass
>>> ## create bytearray containing 3x4 array of longlong
>>> integers = numbytes2('i', range(12), shape0 = 3, shape1 = 4)
>>> print( integers.debug() )
<class 'numbytes.numbytes2'> i refcnt=4 tcode=i tsize=8 offset=0 shape=<3 4> stride=<4 1> transposed=0
[[          0           1           2           3]
[          4           5           6           7]
[          8           9          10          11]]
>>> ## modify underlying bytearray
>>> integers.bytes()[0] = 0xff; integers.bytes()[1] = 0xff
>>> print( integers.bytes() )
bytearray(b'\xff\xff\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00')
>>> print( integers.debug() )
<class 'numbytes.numbytes2'> i refcnt=4 tcode=i tsize=8 offset=0 shape=<3 4> stride=<4 1> transposed=0
[[      65535           1           2           3]
[          4           5           6           7]
[          8           9          10          11]]
>>> ## bytearray as sequence
>>> print( 2 in integers )
True
>>> print( integers.count(2) )
1
>>> print( integers.index(2) )
2
>>> for aa in integers.rows(): print( aa )
[[      65535           1           2           3]]
[[          4           5           6           7]]
[[          8           9          10          11]]
>>> ## slice
>>> print( integers[1:, 2:].debug() )
<class 'numbytes.numbytes2'> i refcnt=3 tcode=i tsize=8 offset=6 shape=<2 2> stride=<4 1> transposed=0
[[          6           7]
[         10          11]]
>>> ## transpose
>>> print( integers.T()[2:, 1:].debug() )
<class 'numbytes.numbytes2'> i refcnt=3 tcode=i tsize=8 offset=6 shape=<2 2> stride=<1 4> transposed=1
[[          6          10]
[          7          11]]
>>> ## reshape
>>> print( integers.reshape(2, -1).debug() )
<class 'numbytes.numbytes2'> i refcnt=3 tcode=i tsize=8 offset=0 shape=<2 6> stride=<6 1> transposed=0
[[      65535           1           2           3           4           5]
[          6           7           8           9          10          11]]
>>> ## setslice
>>> integers.T()[2:, 1:] = range(4); print( integers )
[[      65535           1           2           3]
[          4           5           0           2]
[          8           9           1           3]]
>>> ## almost all arithmetic operations are inplace - use copy to avoid side-effects
>>> ## recast to double
>>> floats = integers.recast('f') / 3; print( floats )
[[        21845      0.333333      0.666667             1]
[      1.33333       1.66667             0      0.666667]
[      2.66667             3      0.333333             1]]
>>> ## copy
>>> print( floats.copy() + integers[0, :] )
[[        87380       1.33333       2.66667             4]
[      65536.3       2.66667             2       3.66667]
[      65537.7             4       2.33333             4]]
>>> ## inplace
>>> print( floats + integers[:, 0] )
[[        87380       65535.3       65535.7         65536]
[      5.33333       5.66667             4       4.66667]
[      10.6667            11       8.33333             9]]
>>> ## inplace
>>> print( floats - integers[:, 0] )
[[        21845      0.333333      0.666667             1]
[      1.33333       1.66667             0      0.666667]
[      2.66667             3      0.333333             1]]
>>> ## inplace
>>> print( floats ** 2 )
[[  4.77204e+08      0.111111      0.444444             1]
[      1.77778       2.77778             0      0.444444]
[      7.11111             9      0.111111             1]]
>>> ## inplace
>>> print( floats.sqrt() )
[[        21845      0.333333      0.666667             1]
[      1.33333       1.66667             0      0.666667]
[      2.66667             3      0.333333             1]]
>>> ## the only inplace exceptions are logical comparisons, which return new char arrays
>>> print( floats )
[[        21845      0.333333      0.666667             1]
[      1.33333       1.66667             0      0.666667]
[      2.66667             3      0.333333             1]]
>>> ## copy as char
>>> print( floats == floats[:, 1] )
[[ 00  01  00  00]
[ 00  01  00  00]
[ 00  01  00  00]]
>>> ## copy as char
>>> print( floats > 1.5 )
[[ 01  00  00  00]
[ 01  01  00  00]
[ 01  01  00  00]]

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

numbytes-2009.12.24.py3k.cpp.tar.gz (80.4 kB view details)

Uploaded Source

File details

Details for the file numbytes-2009.12.24.py3k.cpp.tar.gz.

File metadata

File hashes

Hashes for numbytes-2009.12.24.py3k.cpp.tar.gz
Algorithm Hash digest
SHA256 d278059b86e7ca0d22643570b0852b79c06e7ac9baf9b644e0ff03fc351fff9e
MD5 2f68b2b498ee66644f0e3868f08932fe
BLAKE2b-256 fc811b70d3e9ed0f9d0b10120be4a817aa45a18944ce67acf90c7fd960edfac6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page