列表没有属性重塑

时间:2019-05-04 10:12:28

标签: python numpy numpy-broadcasting

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

cal应该是一个numpy数组,但是cal.reshape给出了错误。另外,在打印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应该是一个numpy数组,但是cal.reshape给出了错误。同样,在打印cal时,我得到了13个元素的数组,但预期会有4个元素的数组,这将是行中元素的总和。

2 个答案:

答案 0 :(得分:1)

问题在于第二行包含5个元素而不是4个元素。如果更正此错误,脚本将起作用。

答案 1 :(得分:1)

如果仔细观察,您的2D列表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.        ]]