我有一个函数可以计算两个大型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] 删除。
我来说两句