这段代码实现了无截距的单变量回归。这是可行的,但我想不出一种方法来做到这一点而不诉诸于使用缓慢的python迭代。有什么想法吗?你知道吗
# y: numpy array of n values, for large n
# coeff: numpy array of n values, for large n
# L : size of result
# l_indices : numpy array of indices from 0 to L-1
def simple_regression(y, coeff, L, l_index):
numerator = y*coeff
denominator = np.square(coeff)
numsum = np.zeros(L)
denomsum = np.zeros(L)
for (n,d,l) in zip(numerator,denominator,l_index):
numsum[l] += n
denomsum[l] += d
return numsum / denomsum
从根本上说,像下面这样的操作不会进行大量的内存分配:
numsum[l] = np.sum(numerator[l_index == l])
(这样做比我的第一个代码要低得多)
如果您知道索引
l_index
只有唯一的值,则可以执行以下操作:如果不知道索引是否唯一,则可以使用
numpy.add.at
执行相同的操作:您可以使用
numpy.bincount
:运行示例:
相关问题 更多 >
编程相关推荐