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
File details
Details for the file numbyte-2009.12.24.py3k.cpp.tar.gz
.
File metadata
- Download URL: numbyte-2009.12.24.py3k.cpp.tar.gz
- Upload date:
- Size: 80.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4f5149433fa020ae1157536e7ea04d2343db1e2b8105016a22a71a950b44a4bf |
|
MD5 | eb9b52d1aec82b003293ab08939e42fe |
|
BLAKE2b-256 | 88aac2a7127846e12c1b7ea586cc6c8fb1d0c34d53b7b7696df6e9cb77c7c03c |