'list'对象没有属性'shape'

时间:2014-01-09 09:01:48

标签: python list numpy

如何创建数组到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)

我收到错误

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

所以,我想我需要将我的X转换为numpy数组?

7 个答案:

答案 0 :(得分:46)

使用numpy.array来使用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)

注意 X.shape返回给定数组的3项元组; [n, T] = X.shape提出了ValueError

答案 1 :(得分:15)

或者,您可以使用np.shape(...)

例如:

import numpy as np

a=[1,2,3]

np.shape(a)会输出(3,)

答案 2 :(得分:12)

import numpy
X = numpy.array(the_big_nested_list_you_had)

它仍然不会做你想要的;你有更多的错误,比如试图将一个三维形状解压缩到test中的两个目标变量。

答案 3 :(得分:4)

python中的

list对象没有'shape'属性,因为'shape'意味着所有列(或行)沿某个维度具有相等的长度。

假设列表变量a具有以下属性:   a = [[2, 3, 4] [0, 1] [87, 8, 1]]

无法为变量'a'定义'形状'。 这就是为什么'形状'可能只用'数组'确定的原因,例如

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

我希望这个解释很好地澄清了这个问题。

答案 4 :(得分:3)

如果您有列表,则可以打印其形状,就像将其转换为数组一样

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

答案 5 :(得分:2)

如果类型是list,则使用len(list)和len(list [0])来获取行和列。

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

len(l)将是2 len(l [0])将为4

答案 6 :(得分:0)

首先你必须导入numpy库(参考制作numpy数组的代码) shape仅在变量是numpy库的属性时才给出输出。换句话说,它必须是np.array或numpy的任何其他数据结构。 例如

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