2017-12-15 22 views
0

데이터 집합 자체의 내용을 변경하지 않고 NumPy 데이터 집합 (즉, ndarray) 과 관련된 일부 특성을 저장하는 방법이 필요합니다. 물론 그 정보는 테이블 자체의 셀에 저장 될 수 없다는 것을 의미합니다. 나는 flags을 보았습니다 만, "배열 플래그는 임의로 설정할 수 없습니다." 일을 분명히하기 위해서, 사소한 예를 들어 보겠습니다. 데이터 세트가 어떤 방식으로 "정리 된" "파이프 라인"을 통과한다고 가정 해보십시오. 이제는이 데이터 세트를 "클리닝 됨"으로 표시하는 플래그 유형을 지정하여 클리닝 작업이 클리닝 된 것으로 표시된 작업에 대해 반복되지 않고 표시되지 않은 작업에 대해서만 수행되도록 줄을 아래로 정렬합니다. 테이블 셀에이 정보를 쓰지 않으면 어떻게 될까요? (이 예를 그대로 해석하지 말고, 내 요점을 설명하기위한 인위적인 예제 일뿐입니다.)임의의 정보를 저장할 numpy 플래그가 있습니까?

EDIT : 이상적인 경우, 읽기/쓰기 시간에 "크게"영향을주지 않으면 이상적입니다. ndarray

+0

당신은 코드에서 데이터 세트의 복사본을 저장 바라고있다? 어느 컨트롤/기술을 사용하고 있는지, 아마도 코드 예제를 게시 한 것일 수 있습니다. 예를 들어 winform 컨트롤에 임의의 정보를 저장하는 일반적인 장소는 Tag – chrispepper1989

+0

입니다. Numpy입니다. 그것이 기술의 의미입니까? 게다가보기와 사본을 모두 처리 할 수있는 유연성이 필요합니다. – chainD

+0

아, 죄송합니다. C#과 관련된 질문을 찾았을 때 어떤 이유에서든 대문자 사용없이 numpy를 인식하지 못했습니다! 데이터 셋 내부에 저장해야하는 구체적인 이유가 무엇입니까? 데이터 세트와 여분의 데이터를 단일 클래스 내에 저장하는 것이 가장 좋지 않겠습니까? – chrispepper1989

답변

3

dtype에 숨길 수 있습니다. 예 :

arr = np.arange(6).reshape(3,2) 
arr.dtype = [('value', int), ('here is a pile of extra data', 'V0')] 

우리가 한 어떤에서 INT V 일명 V0 의미 [int, 'V'],에 DTYPE을 변경하는 것입니다 "0 바이트의 무효 데이터를." 따라서 dtype의 여분의 부분은 공간을 차지하지 않지만 임의의 문자열 일 수있는 이름을가집니다. 그리고 하나 이상의 컬럼을 가질 수 있습니다.

arr['value'] 

을 또는 :

지금 당신은 다음과 같이 원래의 데이터를 얻을 수 있습니다

arr = arr.view(np.recarray) # enable attribute access 
arr.value 

당신이 복합 dtypes에 익숙하지 않은 경우, 그들은 NumPy와는 "구조적 배열을 부르는에서 사용된다 "때로는"재 배열 "합니다.

은 여분의 문자열을 검색하려면 :

arr.dtype.names[1:] 

당신에게 제공합니다 :

('here is a pile of extra data',) 
+0

감사합니다. 답변을 많이 - 정말 깔끔한 해결 방법입니다! 내가 사용하는 경우에 대한 유일한 단서는 분명히 "상당히"읽기 시간이 길다는 것입니다 (그리고 아마도 "빠른"해결책을 요구하지 않았기 때문에 제 질문에이 점을 언급해야 할 것입니다). 귀하의 게시물 (및 arr2 동일한 배열이지만 화합물 dtype없이)에서 arr을 사용하여 빠른 예제 : % timeit arr [ "value"] 루프 당 111 ns ± 0.234 ns (평균 ± 표준 dev.7 회 실행, 10000000 루프) % timeit arr2 루프 당 평균 19.9 ns ± 0.106 ns (평균 실행 시간 7 회, 각각 10000000 루프) – chainD

+0

이 문제를 해결할 방법이 있습니까? – chainD

+1

@chainD : 특별히 여분의 나노초는 어레이의 크기에 비례하지 않기 때문에 현저히 증가하지는 않습니다. 당신은 실제로 당신의 타이밍에서 배열의 데이터를 읽지 않습니다. – user2357112