Python-如何在不使用numpy的情况下获得矩阵上三角形的和?

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,

这个问题与类似,但我想知道如何在不使用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,  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)