8 방향 각각에서 2 차원 행렬의 한 점에서 값의 선을 나타내는 목록을 얻는 비 단식적인 방법은 무엇입니까? 예를 들어 다음과 같은 경우 :
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]], dtype=object)
포인트 (1,2) (값 11)을 선택하면 (1,2) 위의 포인트 목록이 [6,1] 인 상단까지 표시됩니다. 또한 [7,3] 가장자리에 도달 할 때까지 오른쪽 상단에 목록이 표시됩니다. 8 방향 각각에 대한 등. 각 방향에 대해 별도의 for 루프를 사용하고 싶지는 않습니다. 간단한 작업을위한 많은 코드는 말할 것도없고 비단뱀처럼 보입니다. 어떤 아이디어?
한 가지 접근 방식은 어레이를 슬라이스, 다이스, 비틀기 및 망 글링하는 것입니다. 여기에 바로 그 기능이 있습니다.
어레이 :
>>> a = np.arange(25, dtype=int).reshape([5, 5])
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
샘플 코드 :
def directions(a, r, c) -> dict:
"""Return all vectors from an ndarray.
Args:
a (np.ndarray): Array.
r (int): Starting row.
c (int): Starting column.
:Directions:
1: up
2: up/right
3: right
4: down/right
5: down
6: down/left
7: left
8: up/left
Returns:
A dict containing all eight directions of rotation,
starting with the top, moving clockwise.
"""
v = {}
v['1'] = a[r-1::-1, c]
v['2'] = np.diagonal(a[r::-1, c:])[1:]
v['3'] = a[r, c+1:]
v['4'] = np.diagonal(a[r:, c:])[1:]
v['5'] = a[r+1:, c]
v['6'] = np.diagonal(a[r:, c::-1])[1:]
v['7'] = a[r, c-1::-1]
v['8'] = np.diagonal(a[r::-1, c::-1])[1:]
return v
산출:
>>> directions(a, 2, 1)
{'1': array([6, 1]),
'2': array([7, 3]),
'3': array([12, 13, 14]),
'4': array([17, 23]),
'5': array([16, 21]),
'6': array([15]),
'7': array([10]),
'8': array([5])}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다