NumPy와 기능 : dct
글쎄,이 경우
, 그것은 특정 축에 그것을 적용하는 내장 기능을 가지고하는 numpy
기능입니다. 거의 모든 numpy 함수는 전체 배열에서 작동하거나 특정 축 (행 또는 열)에서 작동하도록 지시받을 수 있습니다.
그러니 그냥 dct
함수에 대한 axis
매개 변수를 활용하여 :
dct(X, axis=2)
당신이 동등한 결과를 얻을 것이다 :
>>> (dct(X, axis=2) == np.array(map(dct, X))).all()
True
도> 35 배 빠른 속도의 map
기능을 사용하는 것보다 우리의 예 : (625,4,4)
행렬 :
%timeit dct(X, axis=2)
1000 loops, best of 3: 157 µs per loop
%timeit np.array(map(dct, X))
100 loops, best of 3: 5.76 ms per loop
개
일반 파이썬 기능 : 하나 np.vectorize 또는 np.frompyfunc 기능을 사용하여 다른 경우
, 당신이 할 수있는 vectorize
파이썬 기능.
def foo(x): # gives an error if passed in an array
return x**2
>>> X = np.arange(8, dtype=np.float32).reshape(-1,2,2)
>>> foo_arr = np.vectorize(foo)
>>> foo_arr(X)
array([[[ 0., 1.],
[ 4., 9.]],
[[ 16., 25.],
[ 36., 49.]]])
토론 here는 또한 당신을 위해 도움이 될 수 있습니다 : 예를 들어 당신은 스칼라 연산을 수행하는 데모 기능이있는 경우. 그들이 말했듯이, 당신의 non-numpy 함수를 벡터 라이 제이션하는 것은 실제로 더 빠르게 만들지 않습니다.
감사합니다. 나는 dct의 축 매개 변수가이 상황에서 사용될 수 있다는 것을 알지 못했다. 일반적인 해결책과 관련하여, np.vectorize에 대한 대안에 대해 궁금한 점은 답변의 마지막 부분에서 설명한 것입니다. –
도움이 되니 기쁩니다. –