numbyte - numerical bytearray - c++ numerical buffer interface extending bytearray into numpy-like, 2d array
Project description
numbyte - numerical bytearray - c++ numerical buffer interface extending bytearray into numpy-like, 2d array
REQUIRES PYTHON3.1
QUICK TEST: $ python3.1 setup.py build dev –quicktest
DESCRIPTION: numbyte - numerical bytearray - c++ numerical buffer interface extending bytearray into numpy-like, 2d array
SUMMARY: numbyte is a python3.1 extension module, efficiently implementing numerical 2d arrays. numbyte uses python bytearray as the underlying data structure, simplifying io operation with other python objects.
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 numbyte import * >>> ## subclass numbyte >>> class numbyte2(numbyte): pass
>>> ## create bytearray containing 3x4 array of longlong >>> integers = numbyte2('i', range(12), shape0 = 3, shape1 = 4) >>> print( integers.debug() ) <class 'numbyte.numbyte2'> 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 'numbyte.numbyte2'> 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 'numbyte.numbyte2'> 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 'numbyte.numbyte2'> 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 'numbyte.numbyte2'> 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 exception 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]]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Hashes for numbyte-2009.12.24.py3k.cpp.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4f5149433fa020ae1157536e7ea04d2343db1e2b8105016a22a71a950b44a4bf |
|
MD5 | eb9b52d1aec82b003293ab08939e42fe |
|
BLAKE2b-256 | 88aac2a7127846e12c1b7ea586cc6c8fb1d0c34d53b7b7696df6e9cb77c7c03c |