2017-09-09 18 views
2

(x,y)을 통과하는 행렬의 요소 목록을 얻는 Pythonic 방법은 무엇입니까? 같은 매트릭스 주어진 예를 들어점 (x, y)을 통과하는 대각선 법을 얻는 Python 방법

:

[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] 

및 포인트 가령 (1,3)는 I가 파이썬 방법 9 통과하는 대각선의 요소를 얻을 수있는 방법 (소자 9 나타내는)? 기본적으로 [3,9,15][5,9,13,17,21]입니다.

미안하지만, 저는 단지 파이썬을 배웠습니다. 그러므로 질문입니다. 고맙습니다!

+0

9의 경우 3, 9, 15를 원하십니까? –

+0

@ cᴏʟᴅsᴘᴇᴇᴅ 죄송합니다, 질문을 업데이트했습니다. 나는 대각선을 의미했다. –

+0

행렬을리스트의리스트로 저장하고 있습니까? – dsaxton

답변

5

약간의 오프셋 논리가있는 np.diagonal을 사용합니다.

import numpy as np 

lst = np.array([[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]]) 


i, j = 1, 3 
major = np.diagonal(lst, offset=(j - i)) 
print(major) 
array([ 3, 9, 15]) 

minor = np.diagonal(np.rot90(lst), offset=-lst.shape[1] + (j + i) + 1) 
print(minor) 
array([ 5, 9, 13, 17, 21]) 

인덱스들과 ij는 행 및 열이다. 오프셋을 지정하여 numpy은 대각선 요소를 선택할 위치를 알고 있습니다.

대각선의 경우 첫 번째 행의 3에서 수집을 시작하고 싶습니다. 따라서 현재 열 인덱스를 가져 와서 현재 행 인덱스로 빼서 0 번째 행에 올바른 열 인덱스를 찾아야합니다. 마찬가지로 대각선의 경우 배열이 뒤집 으면서 (90도 회전) 과정이 반복됩니다.

+0

감사합니다. 대각선 방법으로 전달한 매개 변수를 친절하게 설명해 주시겠습니까? –

+0

@UmedhSinghBundela 내 능력을 최대한 발휘하여 설명했습니다. –

+1

두 번째 경우에는 'np.diagonal (np.rot90 (lst), offset = -lst.shape [1] + (j + i) +1)'을 추측하고 있습니다. 고려해 보라.'lst = np.arange (35) .reshape (5,7) + 1'. – Divakar