2011-11-21 5 views
20

Numpy을 사용하는 Python 프로그램에서 iterablearray_like 개체의 차이점은 무엇입니까?전문 용어 : Python과 Numpy -`iterable` 대`array_like`

iterablearray_like은 모두 Python 설명서에서 자주 볼 수 있으며 유사한 속성을 공유합니다.

이 컨텍스트에서 array_like 객체는 Numpy 유형 조작 (예 : Numpy 배열 영역 iterable)을 지원해야 함을 이해합니다. array_likeiterable의 확장 (또는 수퍼 세트?)이라고 말하는 것이 맞습니까?

답변

23

"array-like"은 실제로 NumPy에서만 사용되며 배열을 만들기 위해 numpy.array()의 첫 번째 매개 변수로 전달 될 수있는 모든 것을 말합니다.

"iterable"이라는 용어는 표준 파이썬 용어이며 반복 될 수있는 모든 것을 말합니다 (예 : for x in iterable 사용).

스칼라 유형을 제외하고 대부분의 배열과 유사한 객체는 반복 가능합니다.

많은 iterables는 배열과 유사하지 않습니다. 예를 들어 numpy.array()을 사용하여 생성자 표현식에서 NumPy 배열을 구성 할 수 없습니다. (대신 numpy.fromiter()을 사용해야 할 것입니다. 그럼에도 불구하고, 생성기 표현식은 NumPy 문서의 용어에서 "배열과 같은"것이 아닙니다.)

+0

대 : 여기

는 "NumPy와-토론"메일 링리스트에서 확인합니다. 'array-like '와'numpy.array()'의 첫 번째 인수 사이의 링크가 명확 해집니다. – dtlussier

+0

"모든 배열과 같은 객체는 반복 가능합니다"- 올바르지 않습니다. ''int'' 형의 스칼라 값은 배열 형이며''numpy.array()'''에 전달할 수 있지만 반복 할 수는 없습니다. – wombatonfire

+0

@wombatonfire 예, 맞습니다. 실제 0-d 배열조차도 분명히 "배열 형"이지만 반복 할 수는 없습니다. 그것들은 배열입니다. –

3

Sven의 대답 중 첫 부분은 정확하지만 배열과 같은 객체를 반드시 추가해야한다.

예를 들어, 특정 상황에서 numpy.rint() 함수를 사용하여 배열과 비슷한 객체를 int의 스칼라로 허용하는 기능에 관심이있었습니다. 그들은 반복 할 수는 없지만 받아 들여집니다. intnumpy.array()으로 전달할 수 있으므로 배열과 유사합니다. 감사 - https://mail.scipy.org/pipermail/numpy-discussion/2016-November/076224.html