2016-05-20 7 views
2

この質問はthis oneと似ていますが、numpyを使用せずにこれを行う方法を知りたいと思います。純粋なPythonで行列の上三角形の夏を得るにはどうすればよいですか?したがって、たとえば、私はPython - numpyを使わずに行列の上三角形の和を求めるには?

matrix = [[1, 2, 3], 
      [4, 5, 6], 
      [7, 8, 9]] 

を持ってどのようにして返すことができます:

upper = [2,3,6] 
upperSum = 11 
lower = [4,7,8] 
lowerSum = 19 
+0

あなたは何をしようとしたことがありますか?このアルゴリズムの問​​題に対するあなたのアプローチは何でしょうか? –

+1

ヒント: 'matrix [0] [1] == 2'です。さて、どの指標が上三角形の各要素に対応していますか?どのようにそれらを繰り返しますか? – chepner

答えて

0

コードの例があります:

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) 
0

ベアはこれが唯一のすべてのサブアレイ場合に動作することを念頭に置いて同じ長さです。

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 
0
upper = [] 
[upper.extend(matrix[i][i+1:]) for i in range(len(matrix))] 
lower = [] 
[lower.extend(matrix[i][0:i]) for i in range(len(matrix))] 

そして和ん:-)

0

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 
+0

サイズの変数は何ですか? –

+0

@JustinBrousseau:これは三角形のサイズです。この場合、上三角の場合、最初の行から2つの項目を取ることを定義しています[2、3]。 – niemmi

0

あなたの対角行列である[X] [X]。上の三角形はx [x] [x + n]のすべての行列です。< n <(行列[x] .length - x) 下の三角形は行列[x] [x - n]だから、基本的には0 < N < X

で、ちょうどループのための2つのことを行います。

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 
    } 
} 

を、私はあなたが今、下三角に同じことを行う方法を見つけると確信しています!

2

正方行列の場合: 実際には、非正方行列の場合でも正しく動作すると思います。

和平らハックを使用して)
>>> 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] 
関連する問題