2016-10-31 3 views
0

일부 복잡한 코드를 해독하려고합니다. 아래에서는 코드에 대한 이해를 돕고 코드를 단순화하여 내 질문의 핵심에 도달했습니다.Python : 구문이 배열을 지수화하는 것으로 보입니까? 내가 해석하도록 도와 주는가?

scales = (2**arange(8, 12, .25)).astype(int) 

arange() 떨어져 값 0.25 8 내지 11 범위의 값의 어레이를 생성 저 보인다.

그렇다면 2**arange은 무엇을합니까? 나는 **이 지수화를위한 것임을 알고 있지만, 배열을 누를 수 있다는 것은 나에게 의미가 없다! 배열 내부의 값을 지수화하는 것은 당연합니다. 하지만 그것은 매우 이상한 문법처럼 보입니다!

+1

벡터화 작업에 대해 들어 본 적이 없습니까? 숫자 배열이있는 경우 모든 요소에 대해 동일한 작업을 수행 할 수 있습니다. 'some_array + 1'은'2 ** some_array'와는 다른 배열의 모든 원소에'1'을 더하는 것이고,'exponents'의 배열을'2'의 결과로 원소의 힘으로 바꾸는 것은 어떨까요? – Bakuriu

+0

확실히 전에 들어 본 적이 없어! 하지만 지금은 감사합니다! – philosonista

답변

0

너피 (Numpy) 배열을 사용하면 에 모든 연산자에 숫자 연산자를 적용 할 수 있습니다. 따라서 array * 3은 배열의 모든 요소에 곱셈을 적용하여 결과가 포함 된 새 배열을 생성합니다. 배열을 사용할 수 있습니다. 같은 표현; 결국 모든 사업자가 commutative이 아닙니다. 2 ** array 사용

단순히 2 ** <input item> 계산 된 배열 제조, 2의 지수와 같은 배열의 각 요소를 적용

>>> arange(8, 12, .25) 
array([ 8. , 8.25, 8.5 , 8.75, 9. , 9.25, 9.5 , 9.75, 
     10. , 10.25, 10.5 , 10.75, 11. , 11.25, 11.5 , 11.75]) 
>>> 2**arange(8, 12, .25) 
array([ 256.  , 304.43702144, 362.03867197, 430.53896461, 
     512.  , 608.87404288, 724.07734394, 861.07792922, 
     1024.  , 1217.74808576, 1448.15468787, 1722.15585844, 
     2048.  , 2435.49617153, 2896.30937574, 3444.31171688]) 

따라서 입력 등 8, 8.25, 8.5 함께 배열 인을 결과 배열은 2 ** 8, 2 ** 8.25, 2 ** 8.5 등의 결과를 포함합니다.

그후 array.astype(int) 작업 바닥 결과 :

>>> (2 ** arange(8, 12, .25)).astype(int) 
array([ 256, 304, 362, 430, 512, 608, 724, 861, 1024, 1217, 1448, 
     1722, 2048, 2435, 2896, 3444]) 
0

arange은 벡터화 연산을 지원하는 numpy 배열을 반환합니다. 예를 들어

, 2 ** [1 2 3] 반환 [2 4 8], 단지 2 + [1 2 3]로 돌아 [3 4 5].

0

파이썬의 모든 유형 methods that are the backing methods for various Python operators or operations을 구현할 수 있습니다. 이 경우 특히 numpy.arange().__rpow__(int())이 연산자 및 피연산자 (각각 **int().__pow__(numpy.arange())이 이전에 NotImplementedError을 반환 함)로 인해 호출됩니다. 이것은 새로운 타입에 대한 연산의 정의뿐만 아니라 새로운 타입의 피연산자 자체를 다루는 방법을 알지 못하는 기존의 타입에 대해서도 정의 할 수 있습니다.