web-dev-qa-db-fra.com

L'objet 'list' n'a pas d'attribut 'shape'

comment créer un tableau en tableau numpy?

def test(X, N):
    [n,T] = X.shape
    print "n : ", n
    print "T : ", T



if __name__=="__main__":

    X = [[[-9.035250067710876], [7.453250169754028], [33.34074878692627]], [[-6.63700008392334], [5.132999956607819], [31.66075038909912]], [[-5.1272499561309814], [8.251499891281128], [30.925999641418457]]]
    N = 200
    test(X, N)

Je reçois l'erreur comme 

AttributeError: 'list' object has no attribute 'shape'

Donc, je pense que je dois convertir mon tableau X en tableau numpy?

36
sam

Utilisez numpy.array pour utiliser l'attribut shape.

>>> import numpy as np
>>> X = np.array([
...     [[-9.035250067710876], [7.453250169754028], [33.34074878692627]],
...     [[-6.63700008392334], [5.132999956607819], [31.66075038909912]],
...     [[-5.1272499561309814], [8.251499891281128], [30.925999641418457]]
... ])
>>> X.shape
(3L, 3L, 1L)

NOTEX.shape renvoie un tuple à 3 éléments pour le tableau donné; [n, T] = X.shape soulève ValueError.

44
falsetru

Sinon, vous pouvez utiliser np.shape(...)

Par exemple:

import numpy as np

a=[1,2,3]

et np.shape(a) donnera une sortie de (3,)

11
Ludwig Zhou
import numpy
X = numpy.array(the_big_nested_list_you_had)

Il ne va toujours pas faire ce que vous voulez; vous avez plus de bugs, comme essayer de décompresser une forme tridimensionnelle en deux variables cibles dans test.

10
user2357112

l'objet de liste en python n'a pas d'attribut 'shape' car 'shape' implique que toutes les colonnes (ou lignes) ont la même longueur sur certaines dimensions. 

Disons que la variable de liste a a les propriétés suivantes: a = [[2, 3, 4] [0, 1] [87, 8, 1]]

il est impossible de définir «forme» pour la variable «a» ... C'est pourquoi la «forme» peut être déterminée uniquement avec des «tableaux», par ex.

b = numpy.array([[2, 3, 4]
                [0, 1, 22]
                [87, 8, 1]])

J'espère que cette explication clarifie bien cette question.

4
Yura Vasiliuk

si le type est list, utilisez len (list) et len ​​(list [0]) pour obtenir la ligne et la colonne.

l = [[1,2,3,4], [0,1,3,4]]

len (l) sera 2 len (l [0]) sera 4

2
ZHX

Si vous avez une liste, vous pouvez imprimer sa forme comme si elle était convertie en tableau

import numpy as np
print(np.asarray(X).shape)
2
max

tout d'abord, vous devez importer la bibliothèque numpy (référez-vous au code permettant de créer un tableau numpy) shape ne donne le résultat que si la variable est un attribut de la bibliothèque numpy. En d'autres termes, il doit s'agir d'un np.array ou de toute autre structure de données de numpy .

`>>> import numpy
>>> a=numpy.array([[1,1],[1,1]])
>>> a.shape
(2, 2)`
0
yunus