我有许多大型4D阵列,我想采取的平均值。这些数组大多用零(>;99%)填充,但每个数组在不同的位置都有非零值。每个数组也有一个相应的数组,用于对其进行加权以获取平均值。你知道吗
以一种简单的方式计算数组的平均值(如下所示)需要很长的计算时间,并且常常会导致内存错误。你知道吗
>>> a, b, weights_a, weights_b = [np.zeros((150,150,150,150)) for i in range(4)]
>>> valInds_a = np.random.randint(0,a.size,7000)
>>> valInds_b = np.random.randint(0,b.size,7000)
>>> a.ravel()[valInds_a] = np.random.random(7000)
>>> weights_a.ravel()[valInds_a] = np.random.random(7000)
>>> b.ravel()[valInds_b] = np.random.random(7000)
>>> weights_b.ravel()[valInds_b] = np.random.random(7000)
>>> avg = np.average([a,b],0, weights = [weights_a,weights_b])
我正在寻找一种更快的方法来计算这个意思。我想可能有办法,因为大多数值都是零。我考虑过使用稀疏数组,但它们不支持二维以上的数组。你知道吗
一种方法是只取
a
或b
非零时的平均值,因为我们知道,否则平均值将为零。你知道吗如果您有权访问
valInds_a
和valInds_b
,可以这样做:相关问题 更多 >
编程相关推荐