Numpy 矩阵乘法 U*B*U.T 产生非对称矩阵

2023-12-10

在我的程序中,我需要以下矩阵乘法:

A = U * B * U^T

where B is an M * M对称矩阵,以及U is an N * M其列正交的矩阵。所以我期望A也是一个对称矩阵。

然而,Python 并没有这么说。

import numpy as np
import pymc.gp.incomplete_chol as pyichol

np.random.seed(10)
# Create symmetric matrix B
b = np.matrix(np.random.randn(20).reshape((5,4)))
B = b * b.T
np.all(B== B.T)

B 确实是对称的:

In[37]: np.all(B== B.T)
Out[37]: True

# Create U
m = np.matrix(np.random.random(100).reshape(10,10))
M = m * m.T
# M
U, s, V = np.linalg.svd(M)
U = U[:, :5]
U.T * U

In[41]: U.T * U
Out[41]: 
matrix([[  1.00000000e+00,   0.00000000e+00,  -2.77555756e-17,
          -1.04083409e-17,  -1.38777878e-17],
        [  0.00000000e+00,   1.00000000e+00,  -5.13478149e-16,
          -7.11236625e-17,   1.11022302e-16],
        [ -2.77555756e-17,  -5.13478149e-16,   1.00000000e+00,
          -1.21430643e-16,  -2.77555756e-16],
        [ -1.04083409e-17,  -7.11236625e-17,  -1.21430643e-16,
           1.00000000e+00,  -3.53883589e-16],
        [  0.00000000e+00,   9.02056208e-17,  -2.63677968e-16,
          -3.22658567e-16,   1.00000000e+00]])

So U,一个 10*5 矩阵,确实是正交的,除了数字舍入导致不完全一致。

# Construct A
A = U * B * U.T
np.all(A == A.T)

In[38]: np.all(A == A.T)
Out[38]: False

A不是对称矩阵。

另外,我检查了np.all(U.T*U == (U.T*U).T)将会False.

这就是我的A矩阵不是对称的?换句话说,这是一个无法回避的数字问题吗?

在实践中,如何避免此类问题并获得对称矩阵A?

我用了这个技巧A = (A + A.T)/2迫使它对称。这是解决这个问题的好方法吗?


你观察到So U, a 10*5 matrix, is indeed orthonormal except numerical rounding causes not exactly identity.

同样的推理也适用于A- 除了数字舍入之外,它是对称的:

In [176]: A=np.dot(U,np.dot(B,U.T)) 

In [177]: np.allclose(A,A.T)
Out[177]: True

In [178]: A-A.T
Out[178]: 
array([[  0.00000000e+00,  -2.22044605e-16,   1.38777878e-16,
          5.55111512e-17,  -2.49800181e-16,   0.00000000e+00,
          0.00000000e+00,  -1.11022302e-16,  -1.11022302e-16,
          0.00000000e+00],
       ...
       [  0.00000000e+00,   0.00000000e+00,   1.11022302e-16,
          2.77555756e-17,  -1.11022302e-16,   4.44089210e-16,
         -2.22044605e-16,  -2.22044605e-16,   0.00000000e+00,
          0.00000000e+00]])

I use np.allclose比较浮点数组时。

我也比较喜欢ndarray and np.dot over np.matrix因为逐个元素乘法与矩阵乘法一样常见。

如果代码的其余部分取决于A是对称的,那么你的技巧可能是一个不错的选择。它的计算成本并不昂贵。

因为某些原因einsum避免了数字问题:

In [189]: A1=np.einsum('ij,jk,lk',U,B,U)

In [190]: A1-A1.T
Out[190]: 
array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])

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

Numpy 矩阵乘法 U*B*U.T 产生非对称矩阵 的相关文章

  • python future 和元组解包

    实现像使用 future 进行元组解包这样的事情的优雅 惯用的方法是什么 我有这样的代码 a b c f x y g a b z h y c 我想将其转换为使用期货 理想情况下我想写一些类似的东西 a b c ex submit f x y
  • 在 Python distutils 中从 setup.py 查找脚本目录的正确方法?

    我正在分发一个具有以下结构的包 mymodule mymodule init py mymodule code py scripts script1 py scripts script2 py The mymodule的子目录mymodul
  • 通过列表理解压平列表列表

    我正在尝试使用 python 中的列表理解来展平列表 我的清单有点像 1 2 3 4 5 6 7 8 只是为了打印这个列表列表中的单个项目 我编写了这个函数 def flat listoflist for item in listoflis
  • 填充两个函数之间的区域

    import matplotlib pyplot as plt import numpy as np def domain x np arange 0 10 0 001 f1 lambda x 2 x x 2 0 5 plt plot x
  • 从零开始的 numpy 形状意味着什么

    好的 我发现数组的形状中可以包含 0 对于将 0 作为唯一维度的情况 这对我来说是有意义的 它是一个空数组 np zeros 0 但如果你有这样的情况 np zeros 0 100 让我很困惑 为什么这么定义呢 据我所知 这只是表达空数组的
  • Pandas 数据帧到 numpy 数组 [重复]

    这个问题在这里已经有答案了 我对 Python 很陌生 经验也很少 我已经设法通过复制 粘贴和替换我拥有的数据来使一些代码正常工作 但是我一直在寻找如何从数据框中选择数据 但无法理解这些示例并替换我自己的数据 总体目标 如果有人真的可以帮助
  • 在Python中调整图像大小

    我有一张尺寸为 288 352 的图像 我想将其大小调整为 160 240 我尝试了以下代码 im imread abc png img im resize 160 240 Image ANTIALIAS 但它给出了一个错误TypeErro
  • 更改 `base_compiledir` 以将编译后的文件保存在另一个目录中

    theano base compiledir指编译后的文件存放的目录 有没有办法可以永久设置theano base compiledir到不同的位置 也许通过修改一些内部 Theano 文件的内容 http deeplearning net
  • Python urllib.request.urlopen:AttributeError:'bytes'对象没有属性'data'

    我正在使用 Python 3 并尝试连接到dstk 我收到错误urllib包裹 我对SO进行了很多研究 但找不到与这个问题类似的东西 api url self api base street2coordinates api body jso
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • Numpy 过滤器平滑零区域

    我有一个 0 及更大整数的 2D numpy 数组 其中值代表区域标签 例如 array 9 9 9 0 0 0 0 1 1 1 9 9 9 9 0 7 1 1 1 1 9 9 9 9 0 2 2 1 1 1 9 9 9 8 0 2 2 1
  • python Soap zeep模块获取结果

    我从 SOAP API 得到如下结果 client zeep Client wsdl self wsdl transport transport auth header lb E authenticate self login res cl
  • 使用yield 进行字典理解

    作为一个人为的例子 myset set a b c d mydict item yield join item s for item in myset and list mydict gives as cs bs ds a None b N
  • 如何在 OSX 上安装 numpy 和 scipy?

    我是 Mac 新手 请耐心等待 我现在使用的是雪豹 10 6 4 我想安装numpy和scipy 所以我从他们的官方网站下载了python2 6 numpy和scipy dmg文件 但是 我在导入 numpy 时遇到问题 Library F
  • 使用 PyTorch 分布式 NCCL 连接失败

    我正在尝试使用 torch distributed 将 PyTorch 张量从一台机器发送到另一台机器 dist init process group 函数正常工作 但是 dist broadcast 函数中出现连接失败 这是我在节点 0
  • 迭代 my_dict.keys() 并修改字典中的值是否会使迭代器失效?

    我的例子是这样的 for my key in my dict keys my dict my key mutate 上述代码的行为是否已定义 假设my dict是一本字典并且mutate是一个改变其对象的方法 我担心的是 改变字典中的值可能
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • 列表值的意外更改

    这是我的课 class variable object def init self name name alias parents values table name of the variable self name 这是有问题的函数 f
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d
  • 使用泛型全面实现特征

    我正在通过实现矩阵数学来练习 Rust 但遇到了一些障碍 我定义了我认为与矩阵相关的特征 trait Matrix

随机推荐

  • heroku 在 Windows 上拉取 postgresql

    我正在尝试使用以下命令将 heroku 数据库拉到我的本地 Windows 计算机上 heroku pg pull HEROKU POSTGRESQL DATABASE mydatabase app myapp 但是 当我运行此命令时 出现
  • 如何在 Java 中发出原始 HTTP 请求?

    我想使用这些令牌发出基本的 HTTP 请求 http www w3 org Protocols rfc2616 rfc2616 sec5 html 我知道 Java 通常会为您执行此操作 但我想专门设置某些标记 为什么要重新发明轮子 Apa
  • Cocos2D-x 3.0 中图元和精灵的 Z 索引不一致?

    我有两层 每个图层都有一个使用 OpenGL 进行的原始绘图 如下所示 void Layer1 drawPolygon glLineWidth 1 DrawPrimitives setDrawColor4B 255 255 255 255
  • Angular 视频加载事件

    我仍在尝试理解角度 基本上 我有一个 html5 视频 我想听onloadeddata event http www w3schools com jsref event onloadeddata asp 这就是我所拥有的 html
  • 非常非常大数的对数

    我必须找到非常大的数字的日志 我用 C 做这个 我已经做了一个乘法 加法 减法 除法的函数 但是对数有问题 我不需要代码 我需要一个简单的idea如何使用这些函数来做到这一点 Thanks 附 抱歉 我忘了告诉你 我必须找到仅二进制对数那个
  • 无法从前端 JavaScript 访问跨域响应标头

    我正在使用构建一个简单的网络应用程序ReactJS and 创建反应应用程序 我在 Heroku 上设置了一个后端 API 我可以在其中进行POST要求 一切正常 除了 当我使用 fetch API 发出 POST 请求时 响应 100 正
  • 使用服务器密钥时,Google Sheets API 返回“调用者没有权限”

    我已在 API Manager 中生成了服务器密钥 并尝试在我的 Mac 上执行以下操作 curl https sheets googleapis com v4 spreadsheets MySheetID ranges A1 B5 key
  • 函数、SQL 连接和全局变量

    通过在两者之间使用 mysql query 和 mysql fetch array 命令调用下面的函数来连接和关闭数据库是否有任何问题
  • 从 C++ DLL 调用 C# 方法/函数(通过“Dllimport”从 C# 加载)

    在一个标题中恢复它有点困难 所以这是我的情况 我正在构建一个加载 C 库的 C 应用程序 我从那个 C DLL 调用函数 但我也希望我的 C DLL 从 C 应用程序调用函数 即导入 运行它 这里有一段代码可以使其更全面 I m impor
  • 分页不适用于 NestedScrollView 中的 RecyclerView

    如何实现分页recyclerview那是在里面NestedScrollView 请按照以下步骤操作 1 设置recycler view的嵌套滚动启用为false recyclerView setNestedScrollingEnabled
  • kie 工作台部署战争不工作(tomcat)

    我已经下载了 kie workbench 并解压kie drools wb distribution wars 6 2 0 Final tomcat7 war 我以前从未使用过 tomcat 但我想使用工作台 但似乎没有一个选项可以让工作台
  • 具有 40+ 列的 mysql 表

    我的表格中有 40 多列 我必须添加更多字段 例如当前城市 家乡 学校 工作 大学 大学 将为许多匹配的用户提取这些用户数据 这些用户是共同的朋友 与其他用户朋友一起加入朋友表以查看共同的朋友 并且未被阻止并且还不是该用户的朋友 上面的请求
  • 在Conda环境中使用pip包

    我对如何通过安装软件包感到困惑pip and conda一起工作 我所知道的是 pip and conda安装不同的包格式 除了这一点之外 这里还有什么含义呢 pip无法安装conda封装格式 这对于这个问题的目的来说很好 因为您始终可以使
  • 在Python中组合列表

    我正在尝试合并 2 个列表并希望形成组合 a ibm dell b strength weekness 我想形成像这样的组合 ibm strength ibm weekness dell strength dell weakness 我尝试
  • 基于位置的增强现实 Android 应用程序

    我正在开发基于实时位置的增强现实 Android 应用程序 这是一个简单的概念 我的应用程序应该显示我周围的一些地方 我有 对此进行了深入研究 但我仍然遇到问题 我有我的 GPS 坐标 以及目标地点的 GPS 坐标 我的问题是 如何检索手机
  • Android:SQLite (ORMLite) 事务隔离级别

    我在我的 Android 项目中使用 ORMLite 我知道 Sqlite 负责文件级锁定 多个线程可以读取 一个可以写入 锁可以防止多次写入 有人可以解释一下 如果一个线程正在更新某些记录而另一个线程正在尝试读取该记录 会发生什么情况 线
  • 向上导航未启动父活动

    我有两项活动A and B其中 A 是 B 的父级 现在我显示一个启动 B 的通知 当我点击该通知时 B 就会启动 然后我点击up按钮 当活动 A 位于后台堆栈时 它可以正常工作 但否则应用程序只是关闭并且不会启动活动 A 我的设置 我已在
  • 子目录中的 Zend 应用程序使 Zend 布局链接正常工作

    我在子目录中设置了一个 Zend 应用程序 不要问为什么我必须这样做 不是我喜欢的方法 但我没有这样的选择 Zend 应用程序驻留在名为 dsa 的子目录中 http dsa dev dsa 我的 htaccess RewriteEngin
  • 如何确定 iPhone 6+ (plus) 处于标准模式还是缩放模式

    我正在尝试确定 iPhone 6 是处于标准模式还是缩放模式 但我找不到任何可以帮助确定这一点的 API 到目前为止 唯一指示手机处于哪种模式的是nativeScale if UIScreen mainScreen nativeScale
  • Numpy 矩阵乘法 U*B*U.T 产生非对称矩阵

    在我的程序中 我需要以下矩阵乘法 A U B U T where B is an M M对称矩阵 以及U is an N M其列正交的矩阵 所以我期望A也是一个对称矩阵 然而 Python 并没有这么说 import numpy as np