分享
为什么问答平台  ›  专栏  ›  技术社区  ›  Math_Zombie

列表没有属性重新整形 - List does not have attribute reshape

  •  0
  • Math_Zombie  · 技术社区  · 2 周前

    在下面给出的代码中,我在列表具有重塑属性的最后一行得到一个错误

    cal应该是一个numpy数组,但cal.reforme给出了错误。另外,在打印cal时,我得到了13个元素数组,但是需要一个4个元素数组,它是沿着行的元素总和。

    import numpy as np
    
    A=np.array([[56.0,0.0,4.4,68.0],
    
    [1.0,2.0,104.0,52.0,8.0],
    
    [1.8,135.0,99.0,0.9]])
    
    cal=A.sum(axis=0)
    
    print(cal)
    
    percentage=100*A/cal.reshape(1,4)
    

    cal 应该是一个麻木的数组,但是 cal.reshape 正在给出错误。同时打印 卡尔 我得到的是13个元素数组,但是需要一个4个元素数组,它是沿着行的元素的总和。

    2 回复  |  直到 2 周前
        1
  •  1
  •   Devesh Kumar Singh    2 周前

    如果你仔细看,你的二维列表 A 第二行中有5个元素,而不像其他行中的4个元素,这会导致 np.sum ,因为numpy假设一个齐次数组,其中所有子列表都有相等的行。

    因此,您需要像这样从第二个列表中删除一个元素(在下面的示例中,我删除了第一个元素),以使数组3x4

    import numpy as np
    
    A=np.array([[56.0,0.0,4.4,68.0],
    
    [2.0,104.0,52.0,8.0],
    
    [1.8,135.0,99.0,0.9]])
    
    cal=A.sum(axis=0)
    
    print(cal)
    
    percentage=100*A/cal
    print(percentage)
    

    输出结果是

    [[93.64548495  0.          2.83140283 88.42652796]
     [ 3.34448161 43.51464435 33.46203346 10.40312094]
     [ 3.01003344 56.48535565 63.70656371  1.17035111]]
    

    或者您可以在第一行和第三行中添加额外的0,并将数组的形状调整为(1,5)

    import numpy as np
    
    A=np.array([[56.0,0.0,4.4,68.0, 0],
    
    [1.0, 2.0,104.0,52.0,8.0],
    
    [1.8,135.0,99.0,0.9, 0]])
    
    cal=A.sum(axis=0)
    
    print(cal)
    
    percentage=100*A/cal
    print(percentage)
    

    这里的输出是

    [[ 95.23809524   0.           2.12150434  56.24483044   0.        ]
     [  1.70068027   1.45985401  50.14464802  43.01075269 100.        ]
     [  3.06122449  98.54014599  47.73384764   0.74441687   0.        ]]
    
        2
  •  1
  •   dome    2 周前