나는 numpy에 상당히 새롭다.numpy에서 if 문을 포함하는 for 루프를 벡터화하는 방법은 무엇입니까?
import numpy as np
def get_result(S,K,delS):
res=np.zeros(S.shape[0],dtype=np.float64)
for j in range(res.shape[0]):
if S[j]-K>delS:
res[j]+=np.floor((S[j]-K)/delS)
K+=np.floor((S[j]-K)/delS)*delS
elif S[j]-K<-delS:
res[j]+=np.ceil((S[j]-K)/delS)
K+=np.ceil((S[j]-K)/delS)*delS
return res
S=np.array([1.0,1.05,1.1,1.12,1.09,1.14,1.21,1.6,1.05,1.0,0.95,0.90,0.87,0.77,0.63,0.85,0.91,0.76],dtype=np.float64)
K=1.0
delS=0.1
l=get_result(S,K,delS)
for j in range(S.shape[0]):
print("%d\t%.2f\t%.0f" % (j,S[j],l[j]))
get_result 함수는가 루프 그러나, 따라서 큰 입력 어색 느린 S. 이러한 기능 NumPy와의 벡터화 가능 벡터 포함 I 내게 원하는 결과를 제공하는, 다음 코드가 -통사론? 어떤 도움을 주시면 감사하겠습니다. 어레이 또는 연산 2 개 이상의 조건을 처리
나는 모든 기능은 코드의 단지 세 줄에 벡터화 할 수 있다는 인상을 첫 번째,하지만 K' 루프에서 변화'것으로 나타났습니다. K [j + 1]을 계산할 때 K [j]에 대한 지식이 필요하기 때문에 반복 사이의 종속 관계가 있고 루프를 벡터화 할 수 없습니다. 적어도 내 지식의 최고. – DyZ
비슷한 문제에 대한이 [답변] (http://stackoverflow.com/a/41244906/2593236)을 참조하십시오. – pbreach
'Python 2.x'를 사용한다면''range'' (list를 반환합니다)를'xrange' (generator를 반환)로 대체하면 상당한 속도 향상을 보입니다. – DerWeh