首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >变量交互作用的计算(矩阵中向量的点积)

变量交互作用的计算(矩阵中向量的点积)
EN

Stack Overflow用户
提问于 2018-06-06 02:42:56
回答 1查看 233关注 0票数 4

如果我将一个向量x (1,n)乘以其自身的倒置,即np.dot(x.T, x),我将得到一个二次型矩阵。

如果我有一个矩阵Xmat (k,n),我如何有效地计算行式点积并只选择上三角形元素?

所以,自动取款机。我有以下解决方案:

代码语言:javascript
复制
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])) yield array([ 2, 5, 4, 10, 25])

当我有一个矩阵时,我会使用

代码语言:javascript
复制
np.apply_along_axis(compute_interaction, axis=1, arr = np.asarray([[2,5], [3,4], [8,9]]))

这就产生了我想要的:

代码语言:javascript
复制
array([[ 2,  5,  4, 10, 25],
       [ 3,  4,  9, 12, 16],
       [ 8,  9, 64, 72, 81]])

除了使用apply_along_axis之外,还有其他方法可以计算这个值吗?也许可以使用np.einsum

EN

回答 1

Stack Overflow用户

发布于 2018-06-06 07:20:24

代码语言:javascript
复制
In [165]: arr = np.asarray([[2,5], [3,4], [8,9]])
In [166]: arr
Out[166]: 
array([[2, 5],
       [3, 4],
       [8, 9]])
In [167]: compute_interaction(arr[0])
Out[167]: array([ 2,  5,  4, 10, 25])

就其价值而言,apply_along_axis只是:

代码语言:javascript
复制
In [168]: np.array([compute_interaction(row) for row in arr])
Out[168]: 
array([[ 2,  5,  4, 10, 25],
       [ 3,  4,  9, 12, 16],
       [ 8,  9, 64, 72, 81]])

apply...只是一个方便的工具,可以使多个轴上的迭代更清晰(但不是更快)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50706947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档