将上三角矩阵转换为对称矩阵的快速方法

2024-04-15

我有一个上三角矩阵np.float64值,像这样:

array([[ 1.,  2.,  3.,  4.],
       [ 0.,  5.,  6.,  7.],
       [ 0.,  0.,  8.,  9.],
       [ 0.,  0.,  0., 10.]])

我想将其转换为相应的对称矩阵,如下所示:

array([[ 1.,  2.,  3.,  4.],
       [ 2.,  5.,  6.,  7.],
       [ 3.,  6.,  8.,  9.],
       [ 4.,  7.,  9., 10.]])

转换可以就地完成,也可以作为新的矩阵完成。我希望它尽可能快。我怎样才能快速做到这一点?


np.where在异地、无缓存的情况下看起来相当快:

np.where(ut,ut,ut.T)

在我的笔记本电脑上:

timeit(lambda:np.where(ut,ut,ut.T))
# 1.909718865994364

如果您安装了 pythran,您可以几乎零努力地将速度提高 3 倍。但请注意,据我所知 pythran (当前)仅理解连续数组。

file <upp2sym.py>,编译为pythran -O3 upp2sym.py

import numpy as np

#pythran export upp2sym(float[:,:])

def upp2sym(a):
    return np.where(a,a,a.T)

Timing:

from upp2sym import *

timeit(lambda:upp2sym(ut))
# 0.5760842661838979

这几乎和循环一样快:

#pythran export upp2sym_loop(float[:,:])

def upp2sym_loop(a):
    out = np.empty_like(a)
    for i in range(len(a)):
        out[i,i] = a[i,i]
        for j in range(i):
            out[i,j] = out[j,i] = a[j,i]
    return out

Timing:

timeit(lambda:upp2sym_loop(ut))
# 0.4794591029640287

我们也可以就地进行:

#pythran export upp2sym_inplace(float[:,:])

def upp2sym_inplace(a):
    for i in range(len(a)):
        for j in range(i):
            a[i,j] = a[j,i]

Timing

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

将上三角矩阵转换为对称矩阵的快速方法 的相关文章

随机推荐

  • 如何在本地进行 Facebook Messenger Bot 开发?

    设置 webhooks 时 它会说Secure URL是必须的 我在用ngrok https ngrok com 隧道本地主机地址 这里有一个例子 https github com wit ai node wit https github
  • 如果 Objective C 是 C 的严格超集,那么为什么它不能编译呢?

    考虑以下源文件 它是 至少应该是 有效的 C void id 我正在尝试编译它gcc c test m 但我收到以下错误 test m 1 error id redeclared as different kind of symbol
  • 如何从R中的不同函数将数据依次写入csv文件中?

    我有一个 CSV 文件 我想根据我执行的功能将数据写入另一个 CSV 文件 例如 Data csv Identity State City BusinessName BusinessNeed 12 California Los Angele
  • 通过 angular-cli 生成的角度组件的自定义项目级模板

    如何将自定义角度组件原理图添加到现有项目 我想要例如my page将复制现有的组件模板 node modules schematics angular component 文件 但带有编辑过的模板 我希望它可以通过以下方式实现angular
  • UnionBy Linq 实现

    我需要 Union 的实现来比较对象的属性 而不是对象本身 我想出了以下几点 public static IEnumerable
  • 实时清除数据容器的内容

    My problem is best explained by the architecture below 基本上 我必须清除NSMutableData实时对象 或任何其他对象 即我无法阻止其包含线程 有没有办法 API 来做到这一点 u
  • 32feet.net 如何在 C# 中异步发现附近的蓝牙设备

    我正在尝试使用32英尺 NET http 32feet codeplex comC 应用程序中的蓝牙库用于检测附近的设备 我的小应用程序的目的是通过人们手机的蓝牙功能让电脑知道谁在房间里 执行此类操作的最佳方法是让我想要 跟踪 的设备连接一
  • 将网络摄像头从浏览器流式传输到 RTMP 服务器

    我正在尝试将一些内容从浏览器的网络摄像头实现流式传输到随机 RTMP 服务器 我让它工作到每 2 秒将 WEBM 我相信是 VP8 编码的电影片段发送到我的服务器的部分 但棘手的部分是从该部分将其发送到 RTMP 服务器 对 FFMPEG
  • 如何简单地解析没有指定年份的日期?

    我有一个工具 它似乎可以给我日期 但没有指定我需要转换的年份 并且我正在使用 Java 来完成任务 实际上是 Groovy 但在本例中足够接近 示例日期是 13 Dec 12 00 00 它应该指的是 12 13 2011 因为年份未指定
  • HTML 俄语

    我必须设计一个俄语版本的网站 我从翻译那里得到文本 我把它复制到Dreamweaver的代码中 但它不起作用 我有平常的头 我应该怎么办 您应该将文件的编码更改为 UTF 8 您可以执行此过程 当您Save As文件在记事本中或者您可以使用
  • OpenSSL 上的 EVP_DecryptFinal_ex 错误

    我正在使用 OpenSSL EVP 例程使用 AES 128 cbc 模式进行解密 我使用 NIST 站点指定的测试向量来测试我的程序 该程序似乎在 EVP DecryptFinal ex 例程处失败 谁能告诉我有什么问题吗 另外 我如何在
  • 处理 Swift 2 中异步闭包错误的最佳方法?

    我使用了大量的异步网络请求 顺便说一句 iOS 中的任何网络请求都需要异步 并且我正在寻找更好的方法来处理来自 Apple 的错误dataTaskWithRequest哪个不支持throws 我有这样的代码 func sendRequest
  • 创建名称为“securityConfig”的 bean 时出错:自动装配依赖项注入失败

    我正在尝试结合 Java config 和 xml config 进行 Spring 安全身份验证 但我收到一个错误 创建名称为 securityConfig 的 bean 时出错 自动装配依赖项注入失败 我的代码似乎有什么问题 一直在谷歌
  • 无法在 Ubuntu 上的 PyCharm 上启动终端

    我想运行一段代码 为此 我在我的 Ubuntu 机器上安装了 PyCharm 现在 当我打开 PyCharm 应用程序并尝试打开终端时 它会抛出错误并且不会打开终端 java io IOException Exec tty错误 未知的pyc
  • 管理面板中的 django choicefield 过滤器

    默认情况下 django 管理员list filter提供型号选择中所有可用的过滤器 但除了那些我还想要一个过滤器 我们可以说它是 无 过滤器 class Mymodel char choice field choices 1 txt1 2
  • 18M+行表的子查询和MySQL缓存

    由于这是我的第一篇文章 我似乎只能发布 1 个链接 因此我在底部列出了我所指的网站 简而言之 我的目标是让数据库更快地返回结果 我尝试包含尽可能多的相关信息 以帮助在帖子底部提出问题 机器信息 8 processors model name
  • 在 Snowflake 的公共表表达式中使用“match_recognize”

    更新 已回答here https stackoverflow com questions 68544567 match recognize with cte in snowflake 68550312 68550312 我正在将一个有点复杂
  • 如何找到逻辑回归模型特征的重要性?

    我有一个通过逻辑回归算法训练的二元预测模型 我想知道哪些特征 预测变量 对于正类别或负类别的决策更重要 我知道有coef 参数来自 scikit learn 包 但我不知道它是否足够重要 另一件事是我如何评估coef 值对于消极类和积极类的
  • 在 R 中:带有向量变量的子集或 dplyr::filter

    df lt data frame a LETTERS 1 4 b rnorm 4 vals lt c B D 我可以过滤 子集df值在val with dplyr filter df a in vals subset df a in val
  • 将上三角矩阵转换为对称矩阵的快速方法

    我有一个上三角矩阵np float64值 像这样 array 1 2 3 4 0 5 6 7 0 0 8 9 0 0 0 10 我想将其转换为相应的对称矩阵 如下所示 array 1 2 3 4 2 5 6 7 3 6 8 9 4 7 9