Numpy arrays allow for numeric elements of a certain type only. Those can be integer, float or complex numbers. You can convert a Numpy array to a Python list ...
# using Python module numpy to create a multi-dimensional array/list
import numpy as np
# create a 2x3 array of ones
xf = np.ones((2, 3), float)
print(xf)
'''
[[ 1. 1. 1.]
[ 1. 1. 1.]]
'''
# convert to a 2x3 Python list
print(xf.tolist())
'''
[[1.0, 1.0, 1.0], [1.0, 1.0, 1.0]]
'''
You can create Python multidimensional list this way ...
# creating a multi-dimensional list
# elements can be any object
multi_list = [[1 for col in range(3)] for row in range(2)]
print(multi_list) # [[1, 1, 1], [1, 1, 1]]
# use [row][col]
multi_list[0][1] = 2
multi_list[0][2] = 3
print(multi_list) # [[1, 2, 3], [1, 1, 1]]
My advice, if you have certain number types and need the high speed and some nice array functions, use numpy. Otherwise go for the dictionary approach ...
# create a 3x4x2 3D-array using a dictionary with (x,y,z):value pairs
import pprint
# initializes values to zero
arr3d = dict(((x,y,z), 0) for x in range(3) for y in range(4)
for z in range(2))
# Python3 has dictionary comprehension to simplify this
#arr3d = {(x,y,z):0 for x in range(3) for y in range(4) for z in range(2)}
pprint.pprint(arr3d)
"""my output -->
{(0, 0, 0): 0,
(0, 0, 1): 0,
(0, 1, 0): 0,
(0, 1, 1): 0,
(0, 2, 0): 0,
(0, 2, 1): 0,
(0, 3, 0): 0,
(0, 3, 1): 0,
(1, 0, 0): 0,
(1, 0, 1): 0,
(1, 1, 0): 0,
(1, 1, 1): 0,
(1, 2, 0): 0,
(1, 2, 1): 0,
(1, 3, 0): 0,
(1, 3, 1): 0,
(2, 0, 0): 0,
(2, 0, 1): 0,
(2, 1, 0): 0,
(2, 1, 1): 0,
(2, 2, 0): 0,
(2, 2, 1): 0,
(2, 3, 0): 0,
(2, 3, 1): 0}
"""
print('-'*20)
# change some values, basically assign to index
arr3d[2, 1, 0] = 550
arr3d[1, 0, 1] = 1700
# or ...
ix = (0, 0, 0)
arr3d[ix] = 99
# or just ...
ix = 1, 1, 1
arr3d[ix] = 303
pprint.pprint(arr3d)
"""my output -->
{(0, 0, 0): 99,
(0, 0, 1): 0,
(0, 1, 0): 0,
(0, 1, 1): 0,
(0, 2, 0): 0,
(0, 2, 1): 0,
(0, 3, 0): 0,
(0, 3, 1): 0,
(1, 0, 0): 0,
(1, 0, 1): 1700,
(1, 1, 0): 0,
(1, 1, 1): 303,
(1, 2, 0): 0,
(1, 2, 1): 0,
(1, 3, 0): 0,
(1, 3, 1): 0,
(2, 0, 0): 0,
(2, 0, 1): 0,
(2, 1, 0): 550,
(2, 1, 1): 0,
(2, 2, 0): 0,
(2, 2, 1): 0,
(2, 3, 0): 0,
(2, 3, 1): 0}
"""
print('-'*20)
# get a specific value from a given index
print(arr3d[1, 1, 1]) # 303
# or ...
ix = 0, 0, 0
print(arr3d[ix]) # 99
print('-'*20)
# get the lowest and highest key
low = min(arr3d.keys()) # --> (0, 0, 0)
heigh = max(arr3d.keys()) # --> (2, 3, 1)
# show values
print( "ix=%s val=%s" % (low, arr3d[low]) )
print( "ix=%s val=%s" % (heigh, arr3d[heigh]) )
# get the heighest value in the array
print(max(arr3d.values())) # 1700