【发布时间】:2016-10-12 12:21:53
【问题描述】:
我有一个函数可以计算两个大型 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 一起使用?
【问题讨论】:
-
顺便说一句你可以做
np.zeros_like(crm1)我认为...它更简单。 -
@JohnZwinck 使用
np.zeros_like(crm1, dtype=np.float64)可能会更安全,以防调用者传入整数数据类型的数组。 -
@petermailpan 为什么
for n in xrange(stp+1):中有+1?这将使n的最后一个值太大而不能成为crm1的第二个索引,并导致IndexError。 -
为什么不使用
delta1 = np.minimum(crm1, crm2)**2/crm1(假设crm2与crm1具有相同的形状)而不是循环?它应该更快。
标签: arrays python-2.7 function numpy