我在python中有foll代码:
import random
n=int(input("Enter the limit of your matrix:"))
a=[[random.random()for i in range(n)],[random.random()for j in range(n)]]
for i in range(0,n):
for j in range(0,n):
a[i][j]=int(input("Enter the element:"))
for i in range(0,n):
for j in range(0,n):
if i==j:
print a[i][j]
for i in range(0,n):
for j in range(0,n):
if i==(n-j-1) or i==(n-j+1):
print a[i][j]
但当限制为gn为3时,这不需要9个输入。 在输入7个输入后显示错误。请帮我纠正它。我不应该使用numpy
答案 0 :(得分:3)
创建矩阵
def createMatrix(n):
import random
return [[random.randint(1,9) for _ in range(n)] for _ in range(n)]
>>> createMatrix(3)
[[5, 3, 1],
[3, 6, 7],
[3, 2, 9]]
汇总所有值
def sumMatrix(m):
return sum(sum(i) for i in m)
>>> sumMatrix(a)
39
总结特定列
def sumColumn(m, c):
return sum(i[c] for i in m)
>>> sumColumn(a, 1)
11
总结一个特定的行
def sumRow(m, r):
return sum(m[r])
>>> sumRow(a, 0)
9
答案 1 :(得分:2)
所以问题在于
a=[[random.random()for i in range(n)],[random.random()for j in range(n)]]
不是一个n*n
矩阵,这是你想要的,它是一个n*2
矩阵。你想要这个:
a = [[random.random() for i in range(n)] for j in range(n)]
相反。另请注意,如果您在python 2.7中,请将range
替换为xrange
,因为前者实际上会创建一个列表来迭代(浪费资源),因为后者只是迭代数字没有创建列表。
答案 2 :(得分:1)
您不需要使用随机值初始化数组,因为您要覆盖它们。 random()
是一个非常耗时的功能,但对于小型数组,它是不可见的。您可以创建一个没有random()
的n * n数组:
>>> a = []
>>> for i in range(n):
... tmp = []
... for j in range(n):
... tmp.append(int(input("Enter the element: ")))
... a.append(tmp)
...
Enter the element: 1
Enter the element: 2
Enter the element: 3
Enter the element: 4
Enter the element: 5
Enter the element: 6
Enter the element: 7
Enter the element: 8
Enter the element: 9
>>> a
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
此外,如果您想对每一行和每列求和,请输入以下代码:
>>> for i in a: print sum(i) # sum of rows
...
6
15
24
>>> for i in zip(*a): print sum(i) # sum of columns
...
12
15
18