我正在尝试从用户那里获得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)
答案 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()
函数应用于所有元素(以防万一)。