각 행에 고유 인덱스 (음수가 아닌 정수)가있는 2D NumPy 배열 (N, D)
이 있습니다. 행의 인덱스가 증가하고 있습니다. 예를 들어 내 (4,D)
배열의 인덱스는 (10, 20, 21, 30)
일 수 있습니다. 그들의 인덱스에서NumPy 인덱싱 된 배열의 데이터 구조
선택 행 :
arr[21]
대신의arr[2]
(즉, 절대보다는 상대 색인)가 임의의 변환
나는 나를 수있는 데이터 구조를 찾고 있어요 상대 색인에 대한 절대 색인 목록 및 그 반대로. 예를 들어,
[10, 30, 21, 21]
과[0, 3, 2, 2]
사이에서 앞뒤로 변환하십시오.
이것을 구현하는 가장 깨끗한 방법은 무엇입니까?
새로운 클래스를 생성하고 데이터 (NumPy 배열) 및 색인을 래핑합니다.
__getitem__
,__setitem__
등을 구현하는 것ndarray
에서 파생 된 클래스를 작성하고 절대 색인이 사용되도록 색인을 겹쳐 쓰십시오.select(data, index)
과 같은 기능을 구현하고 코드의 모든 부분을 사용하여 데이터와 색인 (NumPy 배열 모두)에 대해 별도의 개체를 유지합니다.등 (3) 만, 인덱스는 마스크 배열을 이용하고
index.to_relative(data)
index.to_absolute(data)
같은 방법을 제공하는 사용자 클래스의 인스턴스이다.
다른 접근법을 찾을 수있을 것입니다. 나는 이러한 모든 접근법에 찬부 양론을 찾을 수있다. 가장 깨끗한 방법은 무엇입니까? 내가 알지 못하는 "표준"방법이 있습니까?
이 질문을 이해할 수 없습니다. '(N, D)'라고 할 때, N 차원 배열을 가지고 있다는 것을 의미합니까? 그리고 인덱스가'(10, 20, 21, 30) '이 될 수 있다고 말하면 배열의 모양을 의미합니까? 당신이하려는 일의 예와 그것이 어떻게 작동하지 않는지에 대한 예를 제공해 줄 수 있습니까? – farenorth
3. 함수를 사용하는 것이 가장 간단합니다.그러나 인덱스 표기 ('[]')와 인자 표기법을 선호한다면,'np.lib.index_tricks'는 커스텀'__getitem__' 함수를 구현하는 클래스의 예제를 가지고 있습니다. – hpaulj
@farenorth 질문을 명확히했습니다. 내 배열은 2 차원이고, 모양은'(N, D)'입니다. '(10, 20, 21, 30)'은 행과 관련된 임의의 정수입니다 (이 경우 네 개의 행이 있으므로 N = 4). 모든 5 가지 접근법을 구현하는 방법을 알고 있지만 어떤 것이 가장 깨끗한 지 잘 모릅니다. –