TypeError:只有length-1数组可以转换为Python标量Python3

时间:2018-08-31 02:07:08

标签: python arrays python-3.x numpy

我正在尝试从用户那里获得11位数字,并使用前9个数字组成一个3x3数组。我还想用每一列和每一行的总和来创建新的数组。

但是出现错误,我无法理解错误消息。这是问题的标题。

有人可以向我解释为什么我会收到该错误以及如何解决该错误吗?

import numpy as np
id = (input('enter your 11 digit id number : '))
dizi = []
for i in range(0, 9):
dizi.append(id[i])
dizi = np.reshape(dizi, [3, 3])
print(dizi)
toplam = int(id[-1]) + int(id[-2])
rowToplam = [sum(int(dizi[i]))for i in range (4)]
print(rowToplam)
columnToplam = [sum(int(dizi[:,i]))for i in range (4)]
print(columnToplam)

1 个答案:

答案 0 :(得分:0)

该错误表示该函数期望一个值,但您改为传递一个数组(在您的情况下为int())。
确实,如果您考虑自己的代码:

rowToplam = [sum(int(dizi[i]))for i in range (4)]

dizi = np.arange(1,10).reshape(3,3)
#    [[1 2 3]
#     [4 5 6]
#     [7 8 9]]

print(dizi[0]) # [1 2 3] <-- it's not a single value

要完成任务,您可以简单地使用sum()方法指定轴。参见documentation

dizi = np.arange(1,10).reshape(3,3) 

rowToplam = dizi.sum(axis=1) # [ 6 15 24]
columnToplam = dizi.sum(axis=0) # [12 15 18] 

或将您的代码更改为:

n_rows, n_cols = dizi.shape
rowToplam = [sum(map(int,dizi[i])) for i in range(n_rows)]   # [6, 15, 24]
columnToplam = [sum(map(int,dizi[:,i])) for i in range(n_cols)] # [12 15 18] 

在使用map()的情况下将int()函数应用于所有元素(以防万一)。