È possibile creare utilizzando elenchi nidificati:
matrix = [[a,b],[c,d],[e,f]]
Se deve essere dinamico è più complicato, perché non scrivere una piccola classe te stesso?
class Matrix(object):
def __init__(self, rows, columns, default=0):
self.m = []
for i in range(rows):
self.m.append([default for j in range(columns)])
def __getitem__(self, index):
return self.m[index]
Questo può essere utilizzato in questo modo:
m = Matrix(10,5)
m[3][6] = 7
print m[3][6] // -> 7
sono sicuro che si potrebbe implementare lo considerano più efficace. :)
Se sono necessari array multidimensionali, è possibile creare una matrice e calcolare l'offset oppure utilizzare array in matrici di array, il che può essere piuttosto negativo per la memoria.(Potrebbe essere più veloce anche se ...) ho implementato la prima idea in questo modo:
class Matrix(object):
def __init__(self, *dims):
self._shortcuts = [i for i in self._create_shortcuts(dims)]
self._li = [None] * (self._shortcuts.pop())
self._shortcuts.reverse()
def _create_shortcuts(self, dims):
dimList = list(dims)
dimList.reverse()
number = 1
yield 1
for i in dimList:
number *= i
yield number
def _flat_index(self, index):
if len(index) != len(self._shortcuts):
raise TypeError()
flatIndex = 0
for i, num in enumerate(index):
flatIndex += num * self._shortcuts[i]
return flatIndex
def __getitem__(self, index):
return self._li[self._flat_index(index)]
def __setitem__(self, index, value):
self._li[self._flat_index(index)] = value
Può essere usato in questo modo:
m = Matrix(4,5,2,6)
m[2,3,1,3] = 'x'
m[2,3,1,3] // -> 'x'
Per inciso, è possibile ottenere l'infinito in virgola mobile in python come' float ('inf') '. Si comporta più o meno come ci si aspetterebbe: la maggior parte delle operazioni ti dà solo inf e alcuni ti danno nan. –
(unito a una domanda precedente, mantenuto come master come: l'OP esiste ancora, b: la domanda è meglio formulata, e c: per evitare molti negromanti) –