2017-09-21 9 views
0

이것은 내 첫 번째 프로그래밍 클래스이며 데이터 과학을위한 Python을 배우게되어 매우 기쁩니다. 행렬의 모든 대각선 번호를 반환하는 루프를 작성하는 방법을 알아낼 수 없습니다. 아래 코드는 내가 얼마나 가깝거나 멀리 떨어져 있는가? 고맙습니다!큰 2D 배열의 각 2D 사각형 서브 어레이의 대각선 추출

import numpy as np 
cols = 0 

matrixA = np.array([[2,0,0], [0,3,0], [0,0,4], [6,0,0], [0,7,0], [0,0,8]]) 

for rows in range(6): 
    if rows == cols: 
     print(matrixA[rows, cols]) 
    cols = cols + 1 
+0

먼저 자신에게 물어 "어디 요소 2 할, 3, 4, 6, 7, 8이 발생합니까? "이것은 요소를 가져 오는 것에 대한 통찰력을 제공합니다. – jrd1

답변

3

현재 솔루션은 작동하지 않습니다. 당신은 당신의 색인이 범위를 벗어나지 않도록주의해야합니다. 를 실행하면 제공 :

IndexError: index 3 is out of bounds for axis 1 with size 3 

cols 여기에 걸릴 허용되는 최대 값은 2 때문입니다.

대안으로

, 당신은 np.diag 사용할 수 있습니다 당신은 1D 결과를 원하는 경우

print(x) 
array([[2, 0, 0], 
     [0, 3, 0], 
     [0, 0, 4], 
     [6, 0, 0], 
     [0, 7, 0], 
     [0, 0, 8]]) 

res = np.array([np.diag(x, -offset) for offset in range(0, *x.shape)]) 

print(res) 
array([[2, 3, 4], 
     [6, 7, 8]]) 

np.ravel 전화 :

print(res.ravel()) 
array([2, 3, 4, 6, 7, 8]) 
+0

@roganjosh 고맙습니다! rescode 섹션을 무너 뜨릴 수 있습니까? 죄송합니다. 많은 질문에 사과드립니다. Python을 처음 접했고 여기에서 얻은 의견을 진심으로 감사드립니다. 고맙습니다! – Brandon

+0

@Brandon 나는 당신을 문서들과 연결시켰다. 'np.diag'에는'offset '매개 변수가 있습니다.이 매개 변수를 사용하면 대각선 요소의 추출 위치부터 행 번호를 지정할 수 있습니다. 우리는 행을 3 단계 (이 경우)로 이동하려고합니다. 범위가하는 것입니다. –

+0

'range (0, * x.shape)'는 초보자에게주는 매우 불투명 한 코드입니다. @ cᴏʟᴅsᴘᴇᴇᴅ. 그가하고있는 일은'shape ('(6, 3)')을'range'의 인수에 덧붙이면'range (0, * x.shape)'가'range (0 , 6, 3) -> [0, 3]'. '*'는 튜플을 언팩하므로 결과가 없으면'range (0, (6, 3))'이 작동하지 않습니다. –

0

간단한 작업을 수행하려면 numpy과 같은 무거운 라이브러리가 필요하지 않습니다. 일반 파이썬에서는이 같은 zipitertools.cycle(...)를 사용을 통해 작업을 수행 할 수 있습니다

>>> from itertools import cycle 

>>> my_list = [[2,0,0], [0,3,0], [0,0,4], [6,0,0], [0,7,0], [0,0,8]] 
>>> for i, j in zip(my_list, cycle(range(3))): 
...  print(i[j]) 
... 
2 
3 
4 
6 
7 
8 
0

왜 COLS 전혀 있나요? 항상 행과 같습니다. 맞습니까? 이 계정에 matrixA가 사각형이 있다는 사실을 고려하지 않기 때문에

for rows in range(6): 
    print(matrixA[rows,rows]) 
+0

'matrixA'가 사각형이지만 그럴 수 없습니다. –