【问题标题】:'list' object has no attribute 'shape'“列表”对象没有属性“形状”
【发布时间】:2014-01-27 17:39:05
【问题描述】:

如何创建一个数组到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 数组?

【问题讨论】:

    标签: python list numpy


    【解决方案1】:

    使用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

    【讨论】:

    • 那么如果我想获得 n 和 T 的值,因为我正在从 matlab 转换代码,它具有函数 [n,T] = size(X);.
    • @sam,我不知道 matlab。上述数组的期望值是多少(NT)?
    • size(X) 在 matlab 中以单独的变量 m 和 n 返回矩阵 X 的大小。所以 [n,T] = size(X) 将给出数组的大小
    • @sam,我的意思是......让我知道给定列表的具体大小。 9, 3? 3, 3?
    • @sam,使用X.shape。 ;)
    【解决方案2】:

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

    例如:

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

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

    【讨论】:

      【解决方案3】:
      import numpy
      X = numpy.array(the_big_nested_list_you_had)
      

      它仍然不会做你想做的事;您有更多错误,例如尝试将 3 维形状解压缩为 test 中的两个目标变量。

      【讨论】:

        【解决方案4】:

        如果你有列表,你可以打印它的形状,就像它被转换为数组一样

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

        【讨论】:

        • np.shape(X) -- 无需转换数组
        【解决方案5】:

        python 中的列表对象没有“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]])
        

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

        【讨论】:

          【解决方案6】:

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

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

          len(l) 将是 2。

          len(l[0]) 将是 4。

          【讨论】:

            【解决方案7】:

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

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

            【讨论】:

            • 这实际上是更好的答案。
            猜你喜欢
            • 2020-09-18
            • 2020-05-18
            • 2021-09-05
            • 2016-05-09
            • 2015-05-07
            • 2017-02-11
            • 2018-11-22
            • 2020-04-24
            相关资源
            最近更新 更多