[PYTHON] 파이썬에서 "3 점"은 숫자처럼 보이는 것을 인덱싱 할 때 무엇을 의미합니까?
PYTHON파이썬에서 "3 점"은 숫자처럼 보이는 것을 인덱싱 할 때 무엇을 의미합니까?
x [...]의 의미는 무엇입니까?
a = np.arange(6).reshape(2,3)
for x in np.nditer(a, op_flags=['readwrite']):
x[...] = 2 * x
해결법
-
==============================
1.제안 된 복제물 Python Ellipsis 객체는 무엇을합니까? 일반적인 파이썬 컨텍스트에서 질문에 대답 할 때 nditer 루프에서 사용하려면 정보를 추가해야한다고 생각합니다.
제안 된 복제물 Python Ellipsis 객체는 무엇을합니까? 일반적인 파이썬 컨텍스트에서 질문에 대답 할 때 nditer 루프에서 사용하려면 정보를 추가해야한다고 생각합니다.
https://docs.scipy.org/doc/numpy/reference/arrays.nditer.html#modifying-array-values
이 섹션에는 코드 예제가 포함되어 있습니다.
그래서 제 말에, x [...] = ...는 x in-place를 수정합니다; x = ...는 nditer 변수에 대한 링크를 끊었으며 변경하지 않았습니다. 그것은 x [:] = ...와 비슷하지만 모든 차원의 배열 (0d 포함)에서 작동합니다. 이 맥락에서 x는 숫자가 아니라 배열입니다.
아마도이 nditer 반복에 가장 가까운 것은 nditer가없는 것입니다.
In [667]: for i, x in np.ndenumerate(a): ...: print(i, x) ...: a[i] = 2 * x ...: (0, 0) 0 (0, 1) 1 ... (1, 2) 5 In [668]: a Out[668]: array([[ 0, 2, 4], [ 6, 8, 10]])
[i]를 직접 색인화하고 수정해야한다는 것을 유의하십시오. 나는 사용할 수 없었다, x = 2 * x. 이 반복에서 x는 스칼라이므로 변경할 수 없습니다.
In [669]: for i,x in np.ndenumerate(a): ...: x[...] = 2 * x ... TypeError: 'numpy.int32' object does not support item assignment
그러나 nditer의 경우 x는 0d 배열이고 변경할 수 있습니다.
In [671]: for x in np.nditer(a, op_flags=['readwrite']): ...: print(x, type(x), x.shape) ...: x[...] = 2 * x ...: 0 <class 'numpy.ndarray'> () 4 <class 'numpy.ndarray'> () ...
그리고 0d이기 때문에 x [...] 대신 x [...]를 사용할 수 없습니다.
----> 3 x[:] = 2 * x IndexError: too many indices for array
더 단순한 배열 반복은 통찰력을 줄 수도 있습니다 :
In [675]: for x in a: ...: print(x, x.shape) ...: x[:] = 2 * x ...: [ 0 8 16] (3,) [24 32 40] (3,)
이 행의 첫 번째 희미한 점을 반복합니다. x는 1 차원 배열이며 x [:] = ... 또는 x [...] = ....로 수정할 수 있습니다.
다음 섹션에서 external_loop 플래그를 추가하면 x는 이제 1 차원 배열이되고 x [:] =는 작동합니다. 그러나 x [...] = 여전히 작동하고 더 일반적입니다. x [...]는 다른 모든 nditer 예제에서 사용됩니다.
In [677]: for x in np.nditer(a, op_flags=['readwrite'], flags=['external_loop']): ...: print(x, type(x), x.shape) ...: x[...] = 2 * x [ 0 16 32 48 64 80] <class 'numpy.ndarray'> (6,)
이 간단한 행 반복을 (2 차원 배열에서) 비교해보십시오 :
In [675]: for x in a: ...: print(x, x.shape) ...: x[:] = 2 * x ...: [ 0 8 16] (3,) [24 32 40] (3,)
이 행의 첫 번째 희미한 점을 반복합니다. x는 1 차원 배열이며 x [:] = ... 또는 x [...] = ....로 수정할 수 있습니다.
끝까지이 nditer 페이지를 읽고 실험 해보십시오. 그 자체로 nditer는 파이썬에서 유용하지 않습니다. 반복 속도를 향상시키지 않습니다. 코드를 cython으로 이식 할 때까지는 안됩니다 .np.ndindex는 nditer를 사용하는 몇 가지 컴파일되지 않은 numpy 함수 중 하나입니다.
from https://stackoverflow.com/questions/42190783/what-does-three-dots-in-python-mean-when-indexing-what-looks-like-a-number by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] WTForms SelectField의 기본값을 어떻게 설정합니까? (0) | 2018.11.11 |
---|---|
[PYTHON] 동시성, 작업자와 자동 확장 간의 셀러리 차이 (0) | 2018.11.11 |
[PYTHON] 파이썬 3.3을 사용할 때 파이썬 패키지 virtualenv가 필요합니까? (0) | 2018.11.11 |
[PYTHON] 플랫폼 독립적 인 파일 경로? (0) | 2018.11.11 |
[PYTHON] 클래스의 전달 선언? (0) | 2018.11.11 |