Python-如何在不使用numpy的情况下获得矩阵上三角形的和?
这个问题与类似,但我想知道如何在不使用numpy的情况下执行此操作。如何使用纯Python获得矩阵上三角的求和?比如说,我有Python-如何在不使用numpy的情况下获得矩阵上三角形的和?,python,Python,这个问题与类似,但我想知道如何在不使用numpy的情况下执行此操作。如何使用纯Python获得矩阵上三角的求和?比如说,我有 matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 我如何返回: upper = [2,3,6] upperSum = 11 lower = [4,7,8] lowerSum = 19 下面是代码示例: matrix = [[1, 2, 3], [4, 5,
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
我如何返回:
upper = [2,3,6]
upperSum = 11
lower = [4,7,8]
lowerSum = 19
下面是代码示例:
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
upper = []
lower = []
for j in xrange(0, len(matrix)):
for i in xrange(0, len(matrix)):
if j>i:
lower.append(matrix[j][i])
elif j<i:
upper.append(matrix[j][i])
else:
pass
upperSum = sum(upper)
lowerSum = sum(lower)
matrix=[[1,2,3],
[4, 5, 6],
[7, 8, 9]]
上限=[]
下限=[]
对于x范围内的j(0,len(矩阵)):
对于x范围内的i(0,len(矩阵)):
如果j>i:
lower.append(矩阵[j][i])
elif j请记住,只有当每个子数组的长度相同时,这才有效
def GetSum(array):
total = 0
#Set the default value of "total" to 0.
for i in range(len(array)):
#for every item in the array:
total += array[i]
#Append the current selected value in the array to the total.
return total
#Return the total
try:
length = len(matrix)
#Get the length of the "matrix" array.
rowlength = len(matrix[0])
#Get the length of rows (the sub arrays within the main array).
upper = [matrix[0][rowlength-2],matrix[0][rowlength-1],matrix[1][upperlength-1]]
#Get the upper corner of the matrix array.
uppersum = GetSum(upper)
#Get the sum of all the items in "upper".
lower = [matrix[length-2][0],matrix[length-1][0],matrix[length-1][1]]
#Get the lower corner of the matrix array.
lowersum = GetSum(lower)
#Get the sum of all the items in "lower".
except:
print("Incorrect matrix dimensions :/")
#print an error message
然后执行sum:-)一行,带sum
和生成器表达式:
matrix = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
size = 2
sum(sum(matrix[i][-size+i:]) for i in xrange(size)) # 11
sum(sum(matrix[-i-1][:size-i]) for i in xrange(size)) # 19
你的对角线是矩阵[x][x]。所以你的上三角就是矩阵[x][x+n]中x
因此,基本上,只需两个for循环即可:
for(i=0; i<matrix.length; i++){
for(j=i+1; j < (matrix[x].length - x); j++){
//your code, here we iterate on the upper triangle
}
}
for(i=0;i)for square matrix:实际上,我认为即使对于非square matrix,它的行为也正确
>>> m
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> sum(( m[i][i+1:] for i in range(len(m)) ), [])
[2, 3, 6]
>>> sum(( m[i][:i] for i in range(len(m)) ), [])
[4, 7, 8]
(使用求和展平技巧)
你试过什么吗?你解决这个算法问题的方法是什么?提示:matrix[0][1]==2
。现在,哪些索引对应于上三角的每个元素?您可以如何迭代它们?大小变量是什么?@JustinBrousseau:这是三角形的大小,在这种情况下,它定义了我们从第一行取2个项目,在上三角的情况下,我们将[2,3]
。欢迎使用Stack Overflow!虽然您所写的内容可能会回答这个问题,但它确实有点不足,并且可能会让其他用户感到困惑。请您对您的答案进行扩展,使其更清晰、更容易理解?这将有助于更好的答案,并帮助未来的用户了解问题是如何解决的。
>>> m
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> sum(( m[i][i+1:] for i in range(len(m)) ), [])
[2, 3, 6]
>>> sum(( m[i][:i] for i in range(len(m)) ), [])
[4, 7, 8]
>>> sum([[1, 2], [3, 4]], [])
[1, 2, 3, 4]
A=np.random.randint(2,9,(6,6))
upper = []
lower = []
for i in range(0,len(A)):
upper.extend(A[i][i+1:])
lower.extend(A[i][0:i])
Uppersum = sum(upper)
Lowersum = sum(lower)