두 개의 큰 np.arrays (> 1000L,> 1000L) 사이의 비율을 계산하는 함수가 있습니다.
def error(crm1, crm2):
delta1 = np.zeros((crm1.shape[0], crm1.shape[1]))
delta2 = np.zeros((crm2.shape[0], crm2.shape[1]))
stt = np.int(crm1.shape[0])
stp = np.int(crm1.shape[1])
for m in xrange(stt):
for n in xrange(stp):
s1 = crm1[m, n]
s2 = crm2[m, n]
w1 = (min(s1, s2)**2)/s1
w2 = (min(s1, s2)**2)/s2
delta1[m, n] = w1
delta2[m, n] = w2
return (delta1, delta2)
이제 다음과 같이 가변적 인 양의 np.arrays (동일한 차원 및 데이터 유형) 간의 비율을 계산해야한다는 것을 깨달았습니다.
# Case 1
error(array1, array2)
# Case 2
error(array1, array2, array3, array4)
# Case 3
error(array1, array2, array3, array4, array5, array6)
가능하다면 error () 함수와 같은 많은 함수가 있기 때문에 각 경우에 대한 코드를 작성하고 싶지 않습니다. 함수가 가변 량의 np.arrays로 작동하는 결과로 코드를 변경할 수 있습니까?
사용할 수 있습니다 *args
(중요한 것은 인수 이름 앞에 *를 붙이는 것입니다 *foo
. 인수를 호출 할 수 있습니다 ). 또한 배열을 반복하는 대신 numpy 벡터화를 사용해야합니다.
import numpy as np
def err(*args):
# compute the pointwise min once and for all
pointwise_min2 = np.minimum(*args)**2
return tuple([pointwise_min2/arr for arr in args])
(모든 배열의 모양이 같으면 질문의 계산이 의미가 없기 때문에 가정했습니다).
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다