【发布时间】:2018-06-05 18:42:56
【问题描述】:
如果我将向量x (1,n) 与自身相乘,即np.dot(x.T, x),我将得到一个二次形式的矩阵。
如果我有一个矩阵Xmat (k, n),我如何有效地计算逐行点积并仅选择上三角元素?
所以,ATM。我有以下解决方案:
def compute_interaction(x):
xx = np.reshape(x, (1, x.size))
return np.concatenate((x, np.dot(xx.T, xx)[np.triu_indices(xx.size)]))
然后compute_interaction(np.asarray([2,5])) 产生array([ 2, 5, 4, 10, 25])。
当我有一个矩阵时,我会使用
np.apply_along_axis(compute_interaction, axis=1, arr = np.asarray([[2,5], [3,4], [8,9]]))
这会产生我想要的:
array([[ 2, 5, 4, 10, 25],
[ 3, 4, 9, 12, 16],
[ 8, 9, 64, 72, 81]])
除了使用apply_along_axis 来计算之外,还有其他方法吗?也许使用np.einsum?
【问题讨论】:
-
n和k在您的实际使用案例中的典型值是多少? -
假设 k 以千或百万为单位,n 最大为 100。
标签: python numpy vector dot-product numpy-einsum