我目前正在计算一个包含索引求和的函数。索引在0到T的整数部分之间;理想情况下,我希望能够快速计算T的几个值的总和。 在现实生活中,T的大部分值都很小,但是一小部分可能比T大一个或两个数量级。平均。可变数量因子的Numpy矢量化求和
我现在在做的是:
1)我定义了向量T,例如, (我的现实生活中的数据具有条目的数目大得多,这是只给一个想法):
import numpy as np
T = np.random.exponential(5, 10)
2)I创建包含0和INT(T之间的因子的矩阵),然后零:
n = int(T.max())
j = ((np.arange(n) < T[:,np.newaxis])*np.arange(1,n+1)).astype(int).transpose()
print(j)
[[1 1 1 1 1 1 1 1 1 1]
[2 0 2 2 2 0 2 0 2 2]
[0 0 3 0 3 0 3 0 3 3 ]
[0 0 4 0 4 0 0 0 4 4]
[0 0 5 0 5 0 0 0 5 5]
[0 0 6 0 6 0 0 0 6 6]
[0 0 7 0 7 0 0 0 0 7]
[0 0 8 0 8 0 0 0 0 8]
[0 0 9 0 9 0 0 0 0 9]
[0 0 0 0 10 0 0 0 0 10]
[0 0 0 0 11 0 0 0 0 0]
[0 0 0 0 12 0 0 0 0 0]]
3)I生成的总和的单个元件,使用掩模,以避免将所述函数应用于为0的元素:
A = np.log(1 + (1 + j) * 5)* (j>0)
4)我沿着列总结:
A.sum(axis=0)
获得: 阵列([5.170484,2.39789527,29.96464821,5.170484, 42.29052851,2.39789527,8.21500643,2.39789527, 18.49060911,33.9899999])
是否有最快/更好的矢量化方法?由于大量的零不会导致总和,所以我觉得它很慢,但是因为我是NumPy的初学者,所以我找不出一个更好的写作方法。
编辑:在我的实际问题中,应用于j的函数还取决于第二个参数tau(在相同大小的T的向量中)。所以每列中包含的项目都不相同。
你能添加一些涉及'tau'的代表性示例以更详细的方式解释您的EDIT?另外,对于未来的帖子,请使用代表实际案例的示例。 – Divakar