J'ai une liste de nombres qui représentent la sortie aplatie d'une matrice ou d'une matrice produite par un autre programme, je connais les dimensions de la matrice d'origine et je souhaite lire les numéros dans une liste de listes ou une matrice numpue. Il pourrait y avoir plus de 2 dimensions dans le tableau d'origine.
par exemple p> produirait: p> [[0,2,7,6 ],
[3,1,4,5]] p> acclamations à l'avance p> p>
4 Réponses :
Grandiose! Je ne peux pas croire que j'ai manqué cela piquant autour des documents numpus. Merci
Si vous ne voulez pas utiliser NUMPY, il existe une simple doublure pour le boîtier 2D: et peut être généralisé pour multidimensionnelle en ajoutant une récursion: p> import operator
def shape(flat, dims):
subdims = dims[1:]
subsize = reduce(operator.mul, subdims, 1)
if dims[0]*subsize!=len(flat):
raise ValueError("Size does not match or invalid")
if not subdims:
return flat
return [shape(flat[i:i+subsize], subdims) for i in range(0,len(flat), subsize)]
Pour ces doublures, omettez là-bas:
>>> data = [0, 2, 7, 6, 3, 1, 4, 5]
>>> col = 4 # just grab the number of columns here
>>> [data[i:i+col] for i in range(0, len(data), col)]
[[0, 2, 7, 6],[3, 1, 4, 5]]
>>> # for pretty print, use either np.array or np.asmatrix
>>> np.array([data[i:i+col] for i in range(0, len(data), col)])
array([[0, 2, 7, 6],
[3, 1, 4, 5]])
sans problème, nous pouvons faire aussi ci-dessous aussi ..
l1 = [1,2,3,4,5,6,7,8,9]
def convintomatrix(x):
sqrt = int(len(x) ** 0.5)
matrix = []
while x != []:
matrix.append(x[:sqrt])
x = x[sqrt:]
return matrix
print (convintomatrix(l1))