Python - multidimensional arrays

Python does not provide native support for multidimensional arrays. I need to develop an 11-dimensional array and a set of functions to work on it (mostly linear algebra, vector arithmetic). However, importing an external library is not allowed . I have C code and trying to port it to Python:

typedef vec3_t float[3];
vec3_t Array[dim0][dim1][dim2][dim3][dim4][dim5][dim6][dim7][dim8][dim9][dim10];
Array[0][0][0][0][0][0][0][0][0][0][1] = {1.0, 0.0, 0.0};

How can this be effectively implemented in Python (with good readability )?

PS: for Python 2.5 more.

+3
source share
7 answers

( ) , . , :

Array = dict()
Array[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] = [1.0, 0.0, 0.0]

, , , , , , (/defaults? slicing? iteration? etc, ..), . , " ", , !

+6

Matrix :

Python

:

m = Matrix(4,5,2,6)
m[2,3,1,3] = 'x'
m[2,3,1,3] // -> 'x'
+2

- 1- , / , 11 . ( ) . get/set ( 11 ), , , C. , , , .

:

def readArray2(arr,i1,i2,dim2):
    index = i1 * dim2 + i2
    return arr[index]

:

def readArray3(arr,i1,i2,i3,dim2,dim3):
    index = i1 * dim2 * dim3 + i2 * dim3 + i3
    return arr[index]

. . , , , .

+1

, , , , dict :

>>> d[0,1,2,3,4,5,6,7,8,9,0] = [1.0, 0.0, 0.0]

:

>>> coord = (0,1,2,3,4,5,6,7,8,9,0)
>>> d[coord]
[1.0, 0.0, 0.0]

, dict:

>>> class Space(dict):
>>>     def __setitem__(self, key, value):
>>>         if len(key) == 11:
>>>             dict.__setitem__(self, key, value)
>>>         else:
>>>             raise IndexError("Keys must be eleven-dimensional vectors.")

, __getitem__/__setitem__, .

+1
"""
Create multi-dimensional array for given dimensions - (x1, x2, x3, ..., xn)

@author: Naimish Agarwal
"""


def multi_dimensional_array(value, *dim):
    """
    Create multi-dimensional array
    :param dim: a tuple of dimensions - (x1, x2, x3, ..., xn)
    :param value: value with which multi-dimensional array is to be filled
    :return: multi-dimensional array
    """

    if len(dim) > 1:
        return [multi_dimensional_array(value, *dim[1:]) for _ in xrange(dim[0])]
    else:
        return [value for _ in xrange(dim[0])]


if __name__ == "__main__":
    multi_array = multi_dimensional_array(False, *(2, 3, 1))
    print multi_array

numpy.ndarray .

+1

"Multidimensionality" is simply a fancy term meaning "many places of memory." If you look at it in a broader sense, they are simply "one-dimensional." In any case, you can use dictionaries to offer an alternative.

>>> d={}
>>> d[0]={}
>>> d[0][0]="1"
>>> d[0]
{0: '1'}

Create your dicts this way in your "11th dimension".

0
source

You can use lists:

list = [ [ [ '' for i in range(dim0) ] for j in range(dim1) ] for k in range(dim2) ]

etc. thereafter.

0
source

Source: https://habr.com/ru/post/1723964/


All Articles