反转或点 kxnxn 矩阵的快速方法

2024-05-26

有没有一种快速方法可以使用 numpy 计算 kxnxn 矩阵的逆矩阵(在每个 k 切片处计算逆矩阵)?换句话说,有没有办法矢量化下面的代码:

>>>from numpy.linalg import inv
>>>a-random(4*2*2).reshape(4,2,2)
>>>b=a.copy()
>>>for k in range(len(a)):
>>>    b[k,:,:] = inv(a[k,:,:])

首先是关于求逆。我已经研究过np.linalg.tensorinv and np.linalg.tensorsolve.

我认为不幸的是tensorinv不会给你你想要的。它需要数组是“方形”的。这排除了你想要做的事情,因为他们对正方形的定义是np.prod(a[:i]) == np.prod(a[i:]) where i是 0、1 或 2(通常是数组的轴之一);这可以作为第三个参数给出ind of tensorinv。这意味着,如果您有一个长度为 M 的 NxN 矩阵的通用数组,则需要例如(对于 i = 1)NxN == NxM,这通常是不正确的(在您的示例中实际上是正确的,但它无论如何都没有给出正确的答案)。

现在,也许有些事情是可能的tensorsolve。然而,这将涉及一些繁重的施工工作a矩阵数组之前作为第一个参数传递给tensorsolve。因为我们想要b是“矩阵阵列方程”的解a*b = 1 (where 1是单位矩阵的数组)和1将具有相同的形状a and b,我们不能简单地提供a您将上面定义为第一个参数tensorsolve。相反,它需要是形状为 (M,N,N,M,N,N) 或 (M,N,N,N,M,N) 或 (M,N,N,N,N,M) 的数组)。这是必要的,因为tensorsolve将乘以b在最后三个轴上并对它们求和,以便结果(函数的第二个参数)再次具有形状(M,N,N)。

其次,关于点积(您的标题表明这也是您问题的一部分)。这是非常可行的。两个选择。

First: 詹姆斯·亨斯曼 (James Hensman) 的这篇博文 http://jameshensman.wordpress.com/2010/06/14/multiple-matrix-multiplication-in-numpy/给出了一些好的建议。

第二:我个人喜欢用np.einsum为了清晰起见更好。例如。:

a=np.random.random((7,2,2))
b=np.random.random((7,2,2))
np.einsum('ijk,ikl->ijl', a,b)

这将对数组中的所有 7 个“矩阵”进行矩阵乘法a and b。它似乎比上面博客文章中的数组方法慢大约 2 倍,但它仍然比您的示例中使用 for 循环快大约 70 倍。事实上,对于更大的数组(例如 10000 个 5x5 矩阵)einsum方法似乎稍微快一些(不知道为什么)。

希望有帮助。

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

反转或点 kxnxn 矩阵的快速方法 的相关文章

  • Numpy:查找两个 3-D 数组之间的欧几里德距离

    给定两个维度为 2 2 2 的 3 D 数组 A 0 0 92 92 0 92 0 92 B 0 0 92 0 0 92 92 92 如何有效地找到 A 和 B 中每个向量的欧几里得距离 我尝试过 for 循环 但速度很慢 而且我正在按 g
  • 自定义seaborn jointplot中的轴标签

    我似乎陷入了一个相对简单的问题 但在经过一小时的搜索和大量的实验后无法解决它 我有两个 numpy 数组x and y我正在使用seaborn的联合图来绘制它们 sns jointplot x y 现在我想分别将 x 轴和 y 轴标记为 X
  • 小/大 numpy 数组的释放处理方式是否不同?

    我正在尝试调试我的大型 Python 应用程序的内存问题 大部分记忆都在numpy由Python类管理的数组 所以Heapy http guppy pe sourceforge net 等等都是无用的 因为它们不占内存numpy数组 因此
  • 哪个数字代表 shape 返回的元组中的行和列?

    gt gt gt A np matrix np zeros 2 3 gt gt gt A shape 2 3 gt gt gt A matrix 0 0 0 0 0 0 矩阵有吗A有两行三个零或两列三个零 A shape将返回一个元组 m
  • 内存错误:numpy.genfromtxt()

    我有一个 50 000x5 000 矩阵 浮点 文件 使用时x np genfromtxt readFrom dtype float 要将文件加载到内存中 我收到以下错误消息 文件 C Python27 lib site packages
  • Panda如何将行分组到不同的时间桶中?

    我有一个带有名为时间戳的日期时间类型列的数据帧 我想根据时间部分的时间戳将数据帧拆分为多个数据帧 每个数据帧包含按其值模 x 分钟进行值的行 其中 x 是变量 请注意e and f不按原来的顺序 以 10 分钟为模 我希望所有时间都以3在一
  • 使用 cv2 在 python 中创建多通道零垫

    我想用 cv2 opencv 包装器在 python 中创建一个多通道 mat 对象 我在网上找到了一些例子 其中 c Mat zeros 被 numpy zeros 替换 这看起来不错 但似乎没有多通道类型适合 看代码 import cv
  • 制作一个可以接受各种形状参数的函数

    Q1 Numpy 函数可以采用不同形状的参数 例如 np sum V 可以采用以下两个之一并返回具有不同形状的输出 x1 np array 1 3 1 x2 np array 1 2 3 4 5 6 7 8 2 我正在制作自己的函数 如下所
  • Python 多元简单线性回归

    注意这是not关于多元回归的问题 这是一个关于在 Python NumPy 2 7 中多次进行简单 单变量 回归的问题 我有两个m x n arrays x and y 这些行彼此对应 每对都是用于测量的 x y 点的集合 那是 plt p
  • python:numpy 中的组合掩码

    在 numpy 数组中我想替换所有nan and inf变成一个固定的数字 我可以一步完成这一操作以节省计算时间 数组真的很大 吗 a np arange 10 0 a 3 np nan a 5 np inf a 7 np inf a 0
  • 如何使用 Python Gekko 求解绝对值 abs() 目标?

    使用 Python Gekko 中的 IPOPT 成功解决了具有平方目标的优化问题 from gekko import GEKKO import numpy as np m GEKKO x m Var y m Param 3 2 m Obj
  • Python 3 如何知道如何 pickle 扩展类型,尤其是 Numpy 数组?

    Numpy 数组是扩展类型 也称为使用 C API 扩展定义的 声明了 Python 解释器范围之外的附加字段 例如data属性 这是一个Buffer Structure 如 Numpy 中所述阵列接口 https docs scipy o
  • 绘制到图像对象

    我可以保存一个图imshow 因为它返回一个图像对象 如下所示 image plt imshow list interpolation None 后来我想创建其中许多图像的动画 将其保存在列表中并将其渲染为视频 如果这种方法很愚蠢 请告诉我
  • 如何使用 MPI_Scatterv 将矩阵的行发送到所有进程?

    我正在使用 MPI 接口 我想分割一个矩阵 按行 并将各个部分分配给每个进程 例如 我有这个7x7的方阵M M 0 00 1 00 2 00 3 00 4 00 5 00 6 00 7 00 8 00 9 00 10 00 11 00 12
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe

随机推荐

  • 检查 Bash 数组中是否存在元素[重复]

    这个问题在这里已经有答案了 我想知道是否有一种有效的方法来检查 Bash 数组中是否存在元素 我正在寻找类似于我可以在Python中做的事情 例如 arr a b c d if d in arr do your thing else do
  • 为什么我们不能在 Map(Java) 上使用 Iterator?

    我明白要迭代Map 我需要使用entrySet 方法 然后使用Iterator就所得的Set 我觉得这个问题可能很愚蠢 但是 如何Map完全实现 以便使用Iterator直接就可以了 据我所理解 Map不是一个集合 并且Iterator旨在
  • OpenSSL HMAC 函数中的意外复杂性

    SSL 文档分析 这个问题与 OpenSSL 中 HMAC 例程的使用有关 由于 Openssl 文档在某些领域有点薄弱 分析表明使用 unsigned char HMAC const EVP MD evp md const void ke
  • 使 GetRawInputDeviceInfo 和 RIDI_DEVICEINFO 与 C# 一起使用

    我有一个问题 我似乎无法使 GetRawInputDeviceInfo 与 RIDI DEVICEINFO 结合使用 尝试检索 RID DEVICE INFO 根本不起作用 我从函数中得到错误 1 这意味着没有足够的空间来存储 RID DE
  • 机器人/蜘蛛可以利用 Cookie 吗?

    我正在尝试检测访客是否是人类 我刚刚有了一个想法 但不确定这是否可行 但是 如果我可以在用户的 浏览器上存储 cookie 并在他们浏览我的网站时检索它 如果我成功检索 cookie 这是否是检测机器人和蜘蛛的好技术 精心设计的机器人或蜘蛛
  • 在django中使用uuid查询对象

    我正在使用 uuid 创建一个 id 字段 该字段是主键 如下所示 import uuid class User Profile models Model id models UUIDField primary key True defau
  • 使用 SSH.NET SftpClient 设置扩展文件属性

    在使用 Renci SSH NET SFTP 库将文件从 Windows 上传到远程计算机 Ubuntu 16 04 LTS 后 我尝试使用扩展文件属性来存储一些信息 但属性没有得到保留 这就是我尝试设置扩展属性的方式 SftpFileAt
  • 如何获取 3G 调制解调器的 IP 地址?

    我的 GPRS 调制解调器有一张 SIM 卡 它可以连接Web Web 服务给它一个 IP 号码 我需要它 像那样 http www your ip address com http www your ip address com 我怎样才
  • Scrapy CrawlSpider 规则具有多个回调

    我正在尝试创建一个实现 scrapy CrawlSpider 的 ExampleSpider 我的 ExampleSpider 应该能够处理仅包含艺术家信息的页面 仅包含专辑信息的页面 以及其他一些包含专辑和艺术家信息的页面 我能够处理前两
  • 结构成员初始化 - 省略具有默认值的属性值

    我是 Swift 新手 正在关注在线文档 具体来说 我正在查看初始化 https docs swift org swift book LanguageGuide Initialization html https docs swift or
  • 使用 Objective-C 获取 Photoshop 的动作列表

    我正在使用 C 和 Obj C 编写一个与 Photoshop 交互的 OSX 应用程序 我一直在使用NSAppleScript使用动态构建的 AppleScript 来驱动 Photoshop 是的 这有点可怕 我希望能够以不同的方式驱动
  • GO TO 语句 - Fortran 到 Matlab

    我一直在努力将此网格搜索代码从 Fortran 转换为 Matlab 但是我无法正确合并 GO TO 语句 我正在尝试使用 while 循环 但我认为我需要其他东西来结束搜索 任何帮助将不胜感激 vmax 1 0E 15 amax G 1
  • opensc-pkcs 链接错误

    我正在尝试使用在 Redhat linux 5 上构建的 opensc pkcs11 so 但是 当我尝试在示例程序中使用时 它给出了链接错误 main cpp text 0x265 undefined reference to C Ini
  • C 指针与 Objective-C 指针

    我有 Objective C 背景 正在尝试扩展我在 C 方面的知识 然而 有一件事让我感到困惑 那就是 C 和 Obj C 中指针之间的区别 正如您在下面的示例中看到的 两种语言之间的行为似乎有点不同 我想知道您是否可以帮助解释原因 C
  • Gradle 解析策略 cacheDynamicVersionsFor 不起作用

    我想每次都推动 Gradle 重新下载我的 SNAPSHOT 依赖项 可以通过以下方式做到这一点 refresh dependencies 但我想以另一种方式以编程方式完成此操作 configurations all resolutionS
  • SymPy 和 Sage 有什么区别?

    有什么区别SymPy http www sympy org and Sage https www sagemath org 又名 SageMath 全面披露 我是 SymPy 的首席开发人员 您应该了解的第一件事是 SymPy 和 Sage
  • 使用 XSLT 转换 XML 并保留 CDATA(在 Ruby 中)

    我正在尝试将包含如下内容的文档转换为另一个文档 使 CDATA 与第一个文档中的完全相同 但我还没有弄清楚如何使用 XSLT 保留 CDATA 初始 XML
  • 为什么 JSHINT 抱怨这是一种严格的违规行为?

    我认为这可能是重复的使用此关键字并揭示模块模式的严格违规 https stackoverflow com questions 6300937 strict violation using this keyword and revealing
  • C++ 映射插入和查找性能和存储开销

    我想存储一个映射integer的关键float内存中的值 我大约有 1 3 亿个键 相应地 也有 1 3 亿个值 我的重点是查找性能 我必须进行数百万次查找 C STL 库有一个map此类关联数组的类 我有几个问题map 存储开销是多少ma
  • 反转或点 kxnxn 矩阵的快速方法

    有没有一种快速方法可以使用 numpy 计算 kxnxn 矩阵的逆矩阵 在每个 k 切片处计算逆矩阵 换句话说 有没有办法矢量化下面的代码 gt gt gt from numpy linalg import inv gt gt gt a r