我有两个大的 numpy 矩阵,X
和r
(大约 5500x3500)。我需要计算digamma(X+r)
and digamma(r)
,我用scipy.special.psi
. 计算发生在我用于梯度下降拟合的梯度函数中。在优化过程中,梯度函数会被调用很多次,因此它必须快速运行。现在,对于实际问题:
digamma(r)
大约需要 11 秒才能运行digamma(X+r)
运行大约需要 50 秒
出于好奇,我跑了一些其他的例子:
digamma(X.astype(np.float64))
, 运行大约需要 1 分钟digamma(X)
, 运行大约需要 5-6 分钟
为什么会发生这种情况,我能做些什么来改善运行时间?
X
numpy.int64
包含从 0 到 164 的整数 ( )。r
numpy.float64
包含从 0. 到 ~4.6 的浮点数 ( )。- X 非常稀疏(大约 75% 为 0)。
- r 不是稀疏的(大约 10% 为 0)
编辑:更正X.as_float