python-3.x - 有效地计算数组最后一维的点积
问题描述
在多维ndarray的最后一维上计算点积的最快方法是什么?
目前我正在这样做:
import numpy as np
a=np.reshape(np.arange(90),[3,3,2,5])
b=np.reshape(np.arange(90),[3,3,2,5])
# for the sake of simplicity, a and b are the same for this example
ab=(a*b).sum(axis=-1)
我认为这einsum
在这里可能有用,但我很难将其应用于我的案例。
谢谢!
解决方案
对于通用 ndim 数组以沿最后一个轴进行减和 -
np.einsum('...i,...i->...',a,b)
替代np.matmul
-
np.matmul(a[...,None,:],b[...,None])[...,0,0]
注意:在 Python 3.xnp.matmul
上可以替换为@ operator
.
推荐阅读
- prestashop - 首页 prestashop 一直加载没有结果?
- visual-studio - 双击测试资源管理器中的测试时,Visual Studio 不关注规范流场景
- ios - Viewpager 中的 TouchableHighlight 将页面更改事件作为 react-native ios 中的单击
- windows - 无法在 Dockerfile COPY 中复制 Windows 10 中的长路径文件
- python - 为什么两种方法(使用 API 接口的自动测试和手动测试)的分数如此不同?
- php - Jquery在每个循环上获取ID
- ionic-framework - Ionic App 安装时显示默认图标
- javascript - 调用函数的不同方式?
- python - 对于矩阵的每一行,将其值复制到单独的列表中
- reactjs - 如何在材料 ui 自动完成的输入文本字段中显示所选值?