python - numpy向量乘法速度?
问题描述
我是 numpy 的新手,发现了这种奇怪的(对我而言)行为。我正在实现逻辑回归成本函数,这里我有 2 个具有相同维度和相同类型的列向量(dfloat)。y 包含一堆零和一,a 包含范围 (-1, 1) 内的浮点数。在某些时候我应该得到点积,所以我转置一个并将它们相乘:
x = y.T @ a
但是当我使用
x = y @ a.T
偶尔性能下降约 3 倍,而结果是一样的 为什么会这样?操作不一样吗?谢谢。
解决方案
性能下降,你得到一个非常不同的答案!
对于向量乘法(与数字乘法不同)a @ b != b @ a
。在您的情况下(假设列向量),a.T @ b
是一个数字,但是a @ b.T
是一个成熟的矩阵!所以,如果你的向量都是 (1, y) 的形状,最后一个操作将产生一个 (y, y) 矩阵,它可能非常大。当然,计算这样一个矩阵(也就是将大量数字相加并产生大量数字)要比将一堆数字相加并产生一个数字要花费更多的时间。
这就是矩阵(或向量)乘法的工作原理。
推荐阅读
- c++ - ImpersonateLoggedOnUser 在 Windows 服务中不起作用
- python - 为什么设置eval()后pytorch模型表现不佳?
- machine-learning - model.output.op 在 keras 中做了什么?
- security - OWASP ZAP 扫描将“应用程序错误披露”返回到 javascript 库。是误报吗?如何证明或修复?
- python-3.x - 为什么python列表的id在追加操作后没有改变,如果它被实现为动态数组?
- r - Google Play 网页抓取:如何在 R 中识别对应用评论的响应?
- javascript - React chart.js 动态数据更新不渲染
- c# - 将 xamarin 表单中的滚动视图转换为 PDF
- sapui5 - SAP UI5 [面板]-如何在单击按钮时创建新面板
- python - .py{} 扩展名是什么?