10
votes

Lire la liste plate dans une matrice / matrice multidimensionnelle en Python

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 xxx

produirait:

[[0,2,7,6 ], [3,1,4,5]]

acclamations à l'avance


0 commentaires

4 Réponses :



6
votes

Si vous ne voulez pas utiliser NUMPY, il existe une simple doublure pour le boîtier 2D: xxx pré>

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)]


0 commentaires

3
votes

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]])


0 commentaires

0
votes

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))


0 commentaires