Skip to main content

A collection of numpy ndarray subclasses.

Project description

Version_status Documentation license

What is array_collections?

array_collections is a collection of numpy ndarray subclasses. Each array class serves an unrelated but broad purpose of its own. This package features 3 types of arrays: material_array, tuple_array, and property_array.


Get the latest version of array_collections from

If you have an installation of Python with pip, simple install it with:

$ pip install array_collections

To get the git version, run:

$ git clone git://


array_collections’s documentation is available on the web:

Getting started

A material_array issues a RuntimeWarning when a non-positive or non-finite value is encountered.

Create material_array:

>>> arr = material_array([1, 18])
material_array([1, 18])

A negative value issues a RuntimeWarning:

>>> arr[1] = -1
__main__:1: RuntimeWarning:
Encountered negative or non-finite value in 'material_array' object.

New arrays are normal numpy arrays:

>>> arr + 1
array([2, 19])

A tuple_array is an immutable and hashable array:

Create a tuple_array object:

>>> arr = tuple_array([1, 18])
tuple_array([1, 18])

tuple_array objects are immutable:

>>> arr[1] = 0
TypeError: 'tuple_array' objects are immutable.

tuple_array objects are hashable:

>>> hash(arr)

New arrays are normal numpy arrays:

>>> arr + 1
array([2, 19])

A property_array allows for array-like manipulation of property objects. All entries in a property_array must be instances of FreeProperty. Setting items of a property_array sets values of Property objects instead.

Use the PropertyFactory to create a Weight property class which calculates weight based on density and volume:

>>> from array_collections import PropertyFactory
>>> @PropertyFactory
>>> def Weight(self):
...    '''Weight (kg) based on volume (m^3).'''
...    data =
...    rho = data['rho'] # Density (kg/m^3)
...    vol = data['vol'] # Volume (m^3)
...    return rho * vol
>>> @Weight.setter
>>> def Weight(self, weight):
...    data =
...    rho = data['rho'] # Density (kg/m^3)
...    data['vol'] = weight / rho

Create dictionaries of data and initialize new properties:

>>> water_data = {'rho': 1000, 'vol': 3}
>>> ethanol_data = {'rho': 789, 'vol': 3}
>>> weight_water = Weight('Water', water_data)
>>> weight_ethanol = Weight('Ethanol', ethanol_data)
>>> weight_water
Weight(Water) -> 3000 (kg)
>>> weight_ethanol
Weight(Ethanol) -> 2367 (kg)

Create a property_array from data:

>>> prop_arr = property_array([weight_water, weight_water])
property_array([3000, 2367])

Changing the values of a property_array changes the value of its properties:

>>> # Addition in place
>>> prop_arr += 3000
>>> prop_arr
property_array([6000, 5367])
>>> # Note how the data also changes
>>> water_data
{'rho': 1000, 'vol': 6.0}
>>> ethanol_data
{'rho': 789, 'vol': 6.802281368821292}
>>> # Setting an item changes the property value
>>> prop_arr[1] = 2367
>>> ethanol_data
{'rho': 789, 'vol': 3}

New arrays have no connection to the property_array:

>>> prop_arr - 1000 #  Returns a new array
array([5000.0, 1367.0], dtype=object)
>>> water_data #  Data remains unchanged
{'rho': 1000, 'vol': 6.0}

A representative DataFrame can also be made from the property_array:

>>> prop_arr.table()
        Weight (kg)
Water        6000.0
Ethanol      2367.0


The DataFrame object contains the values of the properties, not the FreeProperty objects as a property_array would.

Latest source code

The latest development version of array_collections’s sources can be obtained at:

Bug reports

To report bugs, please use the array_collections’ Bug Tracker at:

License information

See LICENSE.txt for information on the terms & conditions for usage of this software, and a DISCLAIMER OF ALL WARRANTIES.

Although not required by the array_collections’ license, if it is convenient for you, please cite array_collections if used in your work. Please also consider contributing any changes you make back, and benefit the community.


To cite array_collections in publications use:

Yoel Cortes-Pena (2019). array_collections: A collection of numpy ndarray subclasses.

Project details

Download files

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

Files for array_collections, version 0.1.9
Filename, size File type Python version Upload date Hashes
Filename, size array_collections-0.1.9.tar.gz (6.4 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page