'list' object has no attribute 'shape'

PythonListNumpy

Python Problem Overview


how to create an array to numpy array?

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)

I am getting error as

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

So, I think I need to convert my X to numpy array?

Python Solutions


Solution 1 - Python

Use numpy.array to use shape attribute.

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

NOTE X.shape returns 3-items tuple for the given array; [n, T] = X.shape raises ValueError.

Solution 2 - Python

Alternatively, you can use np.shape(...)

For instance:

import numpy as np
a=[1,2,3]

and np.shape(a) will give an output of (3,)

Solution 3 - Python

import numpy
X = numpy.array(the_big_nested_list_you_had)

It's still not going to do what you want; you have more bugs, like trying to unpack a 3-dimensional shape into two target variables in test.

Solution 4 - Python

İf you have list, you can print its shape as if it is converted to array

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

Solution 5 - Python

list object in python does not have 'shape' attribute because 'shape' implies that all the columns (or rows) have equal length along certain dimension.

Let's say list variable a has following properties:

a = [[2, 3, 4]
    [0, 1]
    [87, 8, 1]]

it is impossible to define 'shape' for variable 'a'. That is why 'shape' might be determined only with 'arrays' e.g.

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

I hope this explanation clarifies well this question.

Solution 6 - Python

If the type is list, use len(list) and len(list[0]) to get the row and column.

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

len(l) will be 2.

len(l[0]) will be 4.

Solution 7 - Python

Firstly you have to import numpy library (refer code for making a numpy array). shape only gives the output only if the variable is attribute of numpy library. In other words it must be a np.array or any other data structure of numpy. E.g.

import numpy
a=numpy.array([[1,1],[1,1]])
a.shape
(2, 2)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionsamView Question on Stackoverflow
Solution 1 - PythonfalsetruView Answer on Stackoverflow
Solution 2 - PythonLudwig ZhouView Answer on Stackoverflow
Solution 3 - Pythonuser2357112View Answer on Stackoverflow
Solution 4 - PythonmaxView Answer on Stackoverflow
Solution 5 - PythonYura VasiliukView Answer on Stackoverflow
Solution 6 - PythonZHXView Answer on Stackoverflow
Solution 7 - PythonyunusView Answer on Stackoverflow