np.array
이 다양한 입력을 처리하는 방법에 대한 세부 정보는 컴파일 된 코드에 묻혀 있습니다. 객체 dtype 배열을 만드는 것에 대한 많은 질문이 나타나기 때문에 복잡하고 혼란 스러울 수 있습니다. 기본 모델은 중첩 목록에서 다차원 숫자 배열을 만드는 것입니다.
np.array([[1,2,3],[4,5,6]])
는 구조화 된 배열을 구현하는 개발자는 또 다른 중첩 된 차원에서 레코드를 구별하는 방법으로
tuple
을 채택했다. 이는 구조화 된 배열의 표시에서 분명합니다.
list of tuples
요구 사항이 설명서에 다소 묻혀 있지만 구조화 된 배열을 정의 할 때도 필요합니다.
In [382]: dt=np.dtype([('y',int)])
In [383]: np.array(alist,dt)
TypeError: a bytes-like object is required, not 'int'
이것은 내 버전 '1.12.0'오류 메시지입니다. 그것은 당신에게서 다른 것처럼 보입니다.
목록 이해는 네스트 목록을 튜플 목록으로 변환 할 수 있다는 점에 유의하십시오.
In [384]: np.array([tuple(i) for i in alist],dt)
Out[384]:
array([(1,), (2,), (3,)],
dtype=[('y', '<i4')])
자주 묻는 질문에 답하는 것은 내가 가장 자주 사용하는 접근 방식입니다. 그 중 하나 또는 preallocated 배열의 필드를 반복적으로 설정 (일반적으로 필드보다 훨씬 많은 레코드가 있으므로 루프가 비싸지 않습니다).
In [385]: np.array(np.array(alist),dt)
Out[385]:
array([[(1,)],
[(2,)],
[(3,)]],
dtype=[('y', '<i4')])
In [386]: np.array(alist).astype(dt)
Out[386]:
array([[(1,)],
[(2,)],
[(3,)]],
dtype=[('y', '<i4')])
그러나 차원 수의 변화를주의 :이 구조적 배열 통화 어레이 배치 같다
는 astype
호 동등하다. 튜플의 목록은 (3,) 배열을 만들었습니다. astype
은 (3,1)
숫자 배열을 (3,1) 구조적 배열로 변환했습니다.
튜플이 np.array
이라고 말하는 부분은 배열 크기와 레코드 '여기'사이에 구분을 넣습니다.그것은 해석
[(3,), (1,), (2,)]
[record, record, record]
DTYPE이 (비 구조화 된)은 목록 튜플
In [388]: np.array([tuple(i) for i in alist],int)
Out[388]:
array([[1],
[2],
[3]])
그러나 사이의 구별을 무시 숫자 인 경우
[[record],[record],[record]]
을 생산할 수 [[1],[2],[3]]
의 자동 번역 등 dtype이 컴파운드 인 경우 개발자는 튜플 레이어를 중요한 정보로 사용하도록 선택했습니다.
보다 복잡한 구조 DTYPE
In [389]: dt1=np.dtype([('y',int,(2,))])
In [390]: np.ones((3,), dt1)
Out[390]:
array([([1, 1],), ([1, 1],), ([1, 1],)],
dtype=[('y', '<i4', (2,))])
In [391]: np.array([([1,2],),([3,4],)])
Out[391]:
array([[[1, 2]],
[[3, 4]]])
In [392]: np.array([([1,2],),([3,4],)], dtype=dt1)
Out[392]:
array([([1, 2],), ([3, 4],)],
dtype=[('y', '<i4', (2,))])
표시 (입력)리스트 내의 튜플 내의 목록을 가지고 있다면. 그리고 단지 개시에게있어
In [393]: dt1=np.dtype([('x',dt,(2,))])
In [394]: dt1
Out[394]: dtype([('x', [('y', '<i4')], (2,))])
In [395]: np.ones((2,),dt1)
Out[395]:
array([([(1,), (1,)],), ([(1,), (1,)],)],
dtype=[('x', [('y', '<i4')], (2,))])
convert list of tuples to structured numpy array
행 구조적 배열의 각 요소는 * 구조체 *이기 때문에, 복합 데이터 유형의 일종이 있기 때문에, 튜플을 사용하여 할당 될 필요가 있기 때문에. 대안은 버퍼를 사용하는 것입니다 (이것이'np.array'가 작동하는 이유입니다). –
일종의 문서입니다. [here] (https://docs.scipy.org/doc/numpy/user/basics.rec.html#filling-structured-arrays) –
이전 문서 섹션에서는'x가 튜플리스트로 만들었습니다 .' 이 입력 스타일은 표시 스타일과 일치합니다. 나는 목록 이해력 접근법을 선호한다. 또는 미리 할당 된 배열 필드를 필드로 채 웁니다. – hpaulj