我用numpy-einsum来计算一个列向量pts数组的点积,它的形状是(3,N),它本身是一个矩阵dotps,shape(N,N),以及所有的点积。这是我使用的代码:
dotps = np.einsum('ij,ik->jk', pts, pts)
这是可行的,但我只需要主对角线上方的值。即结果的上三角部分没有对角线。有没有可能只用einsum计算这些值?或者以任何比使用einsum计算整个矩阵更快的方式?在
我的pts数组可以相当大,所以如果我只计算我需要的值,我的计算速度将加倍。在
Tags:
您可以将相关列切片,然后使用^{} -
样本运行-
^{pr2}$进一步优化-
让我们为我们的方法计时,看看是否有改进性能的余地。在
在内存限制内,我们似乎无法对
np.einsum
进行优化。所以,让我们把焦点转移到np.triu_indices
。在对于
N = 4
,我们有:它似乎在创造一种规律性的模式,但有点像是一种变化的模式。这可以用一个累加的和来写,它在
3
和5
位置有移位。一般来说,我们最终会把它编码成这样-让我们为不同的
N's
计时!在因此,对于体面的
N's
,基于triu_indices
的定制cumsum可能值得一看!在相关问题 更多 >
编程相关推荐