2016-04-11 17 views
1

5 x 5 tamsayı matrisine sahibim ve Python'da belirli kodu kullanmam gerekiyor. Matrisin sağ üstünden sağa-sola doğru diyagonal hücrelerdeki değerleri içeren bir liste oluşturmam gerekiyor. Python'da bir matrisin sağ çapraz değerlerini yazdır

matrix = [[ 1, 2, 3, 4, 5], 
      [ 6, 7, 8, 9, 10], 
      [11, 12, 13, 14, 15], 
      [16, 17, 18, 19, 20], 
      [21, 22, 23, 24, 25]] 

İstenilen çıktı:

[5, 9, 13, 17, 21] 

Kısmi kod girişimi:

diagonal = [] 
for posi in matrix???: 
    diagonal.append(??? ???) 

cevap

1

Eğer alt sol üst sağdan diyagonal istediğiniz göz önüne alındığında, size gereken matris pozisyonları [(0 , n), (1, n-1), ..., (n-1, 1), (n, 0)]. Her bir çiftin ilk değeri range(len(matrix)) kullanılarak kolayca elde edilir. İkinci değer, birinci değeri (yani satır numarası) kare matrisin uzunluğundan veya genişliğinden çıkararak (ve daha sonra sıfır bazlı endeksleme nedeniyle bir tane daha çıkartarak) elde edilebilir. Artık dizini almak için her satır/sütun tuple çiftine bakıyorsunuz.

diagonal = [] 
for row in range(len(matrix)): 
    col = len(matrix) - row - 1 # zero based indexing 
    diagonal.append(matrix[row][col]) 

>>> diagonal 
[5, 9, 13, 17, 21] 
+0

O 'olması gerektiğini düşünüyorum matris [n] [4- n] 'OP'nin karşıt diyagonal olmasını istiyor. (veya matris [n] [len (matrix) -n-1] ') – ayhan

+1

Teşekkürler. Bu detayı fark etmemişti. – Alexander

+0

Lütfen kodunuza biraz bağlam ekleyin. – ppperry

1

bu durumda numpy.matrix yılında, gelen numpy sınıfları kullanarak öneririm. Numpy daha sonra değerleri soldan sağa çevirmemize ve köşegenini çıkarmamıza izin verir. çıkış bir liste olması varsa

import numpy as np 

mymatrix = np.matrix([[ 1, 2, 3, 4, 5], 
      [ 6, 7, 8, 9, 10], 
      [11, 12, 13, 14, 15], 
      [16, 17, 18, 19, 20], 
      [21, 22, 23, 24, 25]]) 

mydiagonal = np.matrix.diagonal(np.fliplr(mymatrix)) 

print(mydiagonal) 
[[ 5 9 13 17 21]] 

, bu tolist() kullanarak dönüştürmek için kolay:

print(mydiagonal.tolist()[0]) 
[5, 9, 13, 17, 21] 
0

birçok kod kolay bir şey için

matrix = [[ 1, 2, 3, 4, 5], 
      [ 6, 7, 8, 9, 10], 
      [11, 12, 13, 14, 15], 
      [16, 17, 18, 19, 20], 
      [21, 22, 23, 24, 25]] 

#this mode is faster 
matrix=[matrix[c][d] for c in xrange(5) for d in xrange(5)] 
print matrix 

matrisi = [1, 2, 3 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 24, 25]

#then we work better 
print'Result',matrix[4:-1:4] 

Sonuç [5, 9, 13, 17, 21]

#and the asc diagonal 
print'Result',matrix[::6] 

Sonuç [1, 7, 13, 19, 25]

İlgili konular