如何利用 Numpy(或其他 Python 解决方案)中外积的对称性?

2024-04-03

假设我们要计算向量与其自身的外积:

import numpy as np

a = np.asarray([1, 1.5, 2, 2.5, 3])
A = np.outer(a, a)

print(A)

结果是:

[[ 1.    1.5   2.    2.5   3.  ]
 [ 1.5   2.25  3.    3.75  4.5 ]
 [ 2.    3.    4.    5.    6.  ]
 [ 2.5   3.75  5.    6.25  7.5 ]
 [ 3.    4.5   6.    7.5   9.  ]]

这导致对称矩阵。可以通过仅计算矩阵的一个三角形并从三角形中的相应条目填充剩余条目来利用外积中的两个向量相同这一事实的先验知识。


Question:有没有简单的方法可以利用这些知识numpy(或Python中的其他解决方案)?当然,用 Python 编写自定义解决方案并不会太困难,但如果这是以不使用可靠的 BLAS 为代价的话,那就不太值得了。

我主要关心的是计算时间,而不是 RAM 使用情况。


如果您可以处理仅在下三角中有效的结果,那么这个 Numba 解决方案是我想出的最好的解决方案:

import numba

@numba.njit                 
def outer(arr):
    n = len(arr)
    res = np.empty((n,n), arr.dtype)
    for ii in range(n):
        for jj in range(ii+1):
            res[ii,jj] = arr[ii] * arr[jj]
    return res

它的速度是两倍np.outer()对于大向量,速度是小向量的五倍。如果您需要完全填充的解决方案,您可以设置res[jj,ii] = res[ii,jj]在内循环中,它仍然比np.outer().

因为某些原因,np.multiply.outer()对于小向量来说比np.outer()(对于大向量来说并不慢)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何利用 Numpy(或其他 Python 解决方案)中外积的对称性? 的相关文章

随机推荐

  • 在 django.core.urlresolvers reverse() 调用中包含查询字符串

    我正在尝试反转命名 URL 并在其中包含查询字符串 基本上我修改了登录功能 我想发送 next in it 这就是我现在正在做的事情 reverse name next reverse redirect 这是我想做的 reverse nam
  • 如何解析节点名称中包含无效字符的 XML?

    所以我试图解析一些 XML 其创建不在我的控制之下 问题是 他们以某种方式得到了如下所示的节点
  • 尝试通过 HTTPS 传递 swagger.json 时出现“未提供规范”错误

    如果我尝试使用 Flask RestPlus 通过 HTTPS 交付 Swagger UI 我只会在根 URL 处看到 未提供规范 错误消息 并且完整的 Swagger UI 永远不会加载 但是 如果我访问 API 端点 它们会按预期返回响
  • 无法安装 .NET Standard 2.0

    我正在尝试创建一个 NET Standard 2 0 项目 但是在项目属性页面上它仅具有最高 NET Standard 1 6 的选项 我转到 Visual Studio gt 工具 gt 扩展和更新 gt 更新 gt 产品更新 并将 Vi
  • 删除对象的私有属性

    尝试并搜索了这个 但似乎从未在 SO 中找到它 尝试使用unset this gt property name 但当我使用时它仍然出现print r object name 是否不可能删除对象的私有属性 这是一个示例代码 class my
  • ASP.NET 5 中的 URL 重写

    我使用的是 ASP NET 5 其中整个文件夹结构已更改 并且 web config 已替换 与以前的 ASP NET 版本相比 我正在使用 angularJS 进行客户端路由 并且我有以下路线 when movies add templa
  • 如何使 CPAN::Meta::Spec 的“先决条件”需要发行版而不是软件包?

    我正在研究如何打包我的一些 Perl 应用程序并更好地管理它们的依赖项 以使我和我的客户更容易分发 这很可能根本不包括上传到 CPAN 相反 如果有必要 我会提供自定义存储库 或者更可能的是 访问 Subversion 等 SCM CPAN
  • 你能以编程方式获取 Firefox 附加组件列表吗

    在查看了缓存等之后 我花了相当多的时间试图确定为什么我的网站视图与客户端不匹配 我们确定问题出在其中一个附加组件上 在这种特殊情况下为 Adblock Plus 如果我们能够有一种简单的方法来查询安装了哪些附加组件 并且最好是处于活动状态
  • Spark作业是什么?

    我已经完成了 Spark 安装并执行了一些设置主节点和工作节点的测试用例 也就是说 我对 Spark 上下文 而不是 SparkContext 中的作业到底意味着什么感到非常困惑 我有以下问题 工作与驱动程序有多么不同 应用程序本身是驱动程
  • 如何在多行字符中只显示一个标签?

    我使用 Chart js 创建一个图表 该图有两条线 因此它默认也显示两个标签 但我需要一种配置 其中应该显示红色标签 而应该隐藏蓝色标签 标签not线 感谢您的帮助 var config type line data labels 16
  • 创建自动调整大小的打印输出

    我的应用程序需要打印一些东西 布局应该有点动态 有时特定字段可能包含更多数据 这可能需要它们自动换行或类似的 但打印输出不应超过一页 如果数据太多 我想稍微减小字体大小 然后重试 然后重复 直到所有内容都适合一个页面 永远不会so许多数据的
  • CR 与 LF perl 解析

    我有一个 perl 脚本 它解析一个文本文件并将其每行分解为一个数组 当每行以 LF 终止时它工作正常 但当它们以 CR 终止时我的脚本无法正确处理 我该如何修改这一行来解决这个问题 my allLines split entireFile
  • 检查用户是否已连接 AppleWatch,而不提示手表

    我们正在使用谷歌分析 并想知道我们有多少用户拥有苹果手表 我在 Stack 中搜索了答案 反复出现的答案是使用这个 if WCSession isSupported check if the device support to handle
  • MySQL外键允许NULL吗?

    我正在拼凑一个图像网站 基本模式非常简单 MySQL 但我在尝试表示与图像关联的可能的管理标志 不适当 受版权保护 等 时遇到了一些麻烦 我目前的想法如下 tblImages imageID INT UNSIGNED NOT NULL AU
  • Java 夏令时不适用于遥远的过去(更新:确实如此)?

    下面这段代码 TimeZone getTimeZone Europe Athens inDaylightTime new Date 200 8 14 returns true 与 2011 年的情况非常相似 但是 夏令时 https en
  • 如何使用 Eclipse JDT ASTParser 获取方法的类名?

    我想做的是获取方法的类名 例如 我想获得一类 直到 和 搜索 方法 这是代码 Query query new Query queryStr until dateStr QueryResult queryResult twitter1 sea
  • 使用 WSL 2 进行 GPU 加速

    我正在尝试设置张量流以在运行 Ubuntu 20 04 的 WSL 2 上使用 GPU 加速 我正在跟进本教程 https ubuntu com blog getting started with cuda on ubuntu on wsl
  • 使用google data fusion连接mysql失败

    我无法从 google data fusion 连接到 MySQL 步骤 首先 我添加连接器https dev mysql com downloads file id 462850 https dev mysql com downloads
  • 用于嵌入 flashplayer 的 swfobject 的替代方案

    有谁知道 swfobject 是否有更好的替代品 我实际上很喜欢 swfobject 我只是想听听是否有人找到更好的东西 或者也许这是最好的方法 如果您不知道 swfobject 您可以在这里找到它 http code google com
  • 如何利用 Numpy(或其他 Python 解决方案)中外积的对称性?

    假设我们要计算向量与其自身的外积 import numpy as np a np asarray 1 1 5 2 2 5 3 A np outer a a print A 结果是 1 1 5 2 2 5 3 1 5 2 25 3 3 75