따라서 목표는 배열의 0이 아닌 요소 그룹의 왼쪽 상단 및 오른쪽 하단 인덱스를 제공하는 함수를 작성하는 것입니다. 두 그룹은 어레이에서 서로 옆에있을 수 없습니다. 그룹이 하나의 요소로만 존재하는 경우 왼쪽 상단과 오른쪽 하단 인덱스는 동일합니다. 0이 아닌 요소의 모든 인덱스를 가져 오는 함수를 얻는 것은 쉬웠지만 필터링 할 수 없어서 왼쪽 상단과 오른쪽 하단 인덱스 만 남았습니다. 이미 얻은 기능은 다음과 같습니다.
import numpy as np
def get_indexes(A):
M,N = A.shape
pos = []
for i in range(M):
for j in range(N):
if A[i,j]!=0:
pos.append((i,j,A[i,j]))
return pos
다음은 주어진 배열의 예입니다.
A= np.array([[0, 7, 7, 0, 0, 0, 0, 0, 0],
[0, 7, 7, 0, 0, 9, 0, 0, 0],
[0, 7, 7, 0, 0, 9, 0, 0, 0],
[0, 7, 7, 0, 0, 9, 0, 0, 0],
[0, 7, 7, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0],
[6, 6, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 5, 5, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]])
도움을 주셔서 감사합니다!
0이 아닌 요소의 왼쪽 상단 인덱스를 찾고 0이 아닌 요소의 오른쪽 하단 인덱스를 얻기 위해 for 루프의 증가하는 순서로 행렬을 탐색했습니다. 여기에 코드 :
import numpy as np
A= np.array([
[0, 7, 7, 0, 0, 0, 0, 0, 0],
[0, 7, 7, 0, 0, 9, 0, 0, 0],
[0, 7, 7, 0, 0, 9, 0, 0, 0],
[0, 7, 7, 0, 0, 9, 0, 0, 0],
[0, 7, 7, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0],
[6, 6, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 5, 5, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]])
def getting_top_left_indexes(A):
break_condition = False
M,N = A.shape
pos = []
for i in range(M):
if break_condition == True:
break
for j in range(N):
if A[i,j]!=0:
pos.append((i,j,A[i,j]))
break_condition = True
break
return pos
def getting_bottom_right_indexes(A):
break_condition = False
M,N = A.shape
pos = []
for i in range(M-1, 0, -1):
if break_condition == True:
break
for j in range(N-1, 0, -1):
if A[i,j]!=0:
pos.append((i,j,A[i,j]))
break_condition = True
break
return pos
top_left_indexes = getting_top_left_indexes(A)
bottom_right_indexes = getting_bottom_right_indexes(A)
편집 : 귀하의 설명에 대한 제 답변을 편집했습니다. 다음은 업데이트 된 코드입니다.
import numpy as np
A= np.array([
[0, 7, 7, 0, 0, 0, 0, 0, 0],
[0, 7, 7, 0, 0, 9, 0, 0, 0],
[0, 7, 7, 0, 0, 9, 0, 0, 0],
[0, 7, 7, 0, 0, 9, 0, 0, 0],
[0, 7, 7, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0],
[6, 6, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 5, 5, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0]])
def get_indexes(A):
M,N = A.shape
pos = []
for i in range(M):
for j in range(N):
if A[i, j] != 0:
pos.append((i,j,A[i,j]))
return pos
def filtering_indexes(indexes):
filtered_list = []
sorted_indexes = sorted(indexes, key=lambda x: x[-1])
top_left_index = sorted_indexes[0]
for i in range(0, len(sorted_indexes)):
if sorted_indexes[i][2] == top_left_index[2]:
pass
else:
filtered_list.append(sorted_indexes[i-1])
top_left_index = sorted_indexes[i]
filtered_list.append(top_left_index)
if sorted_indexes[i][2] == top_left_index[2]:
filtered_list.append(sorted_indexes[i])
return filtered_list
indexes = get_indexes(A)
filtered_indexes = filtering_indexes(indexes)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다