제공된 코드는 완벽하게 작동하지만 가능한 한 더욱 효율적으로 만들고 싶습니다.다음 코드를 더 빠르게 만들 수 있습니까?
제 질문은 배열 np_b
을 더 효율적으로 생성 할 수 있는지 여부입니다. 특히, theano_f(*np_a)
을 통해 np_a
의 모든 요소에 대해 theano_f
함수를 계산하여 방송 (?) 또는 벡터화 (?)가 적용될 수 있습니까?
실제 문제를 단순화했으며 theano_f
을 생성해야하고 sympy 함수에서 theano_function
을 사용하고 실제 배열 np_a
에는 수많은 요소가 들어 있습니다.
from sympy import symbols
from sympy.printing.theanocode import theano_function
import numpy as np
x,y,z = symbols('x y z')
sympy_f = x+y+z # a sympy-function which depends on 3 variables
theano_f = theano_function([x,y,z], [sympy_f]) # Theano-compiled function which depends on 3 scalars
np_a = np.array([[1,1,1],[2,2,2],[-1,-2,0],[0,2,0]])
np_b = np.array([theano_f(*x) for x in np_a]) # The obtained four numbers
#should be recorded into the numpy-array np_b
print(np_b)
'numpy.vectorize'는 적어도 배열에 백업으로 변환 한 후, 목록을 작성 피할 것 doc/numpy-1.10.0/reference/generated/numpy.vectorize.html을 참조하십시오. – JulienD
답변 해 주셔서 감사합니다. 불행히도, 나는 아직도 그것을 작동시키는 방법을 이해하지 못합니다. 벡터화 된 함수'vectorized_f = np.vectorize (theano_f)'를 만들었습니다. 그러나'vectorized_f (* [1,1,1])'는 정상적으로 작동하지만 vectorized_f (np_a)는 TypeError를 발생시킵니다 : 필요한 입력이 없습니다. 그래서 나는 전체적인 문제가'np_a'에있는 요소를 푸는 것과 같다고 생각합니다. 이 상황에서 실제로 벡터화를 적용하는 방법을 보여줄 수 있습니까? –