如何从 9 个大小为 N 的数组快速创建 N 个 3x3 矩阵的数组?

2023-12-09

假设我有 9 个大小为 N 的数组(A、B、C、.. J)。我想创建一个由 N 3x3 矩阵组成的新数组,例如

matrices[i] = [[A[i], B[i], C[i]],
               [D[i], E[i], F[i]],
               [G[i], H[i], J[i]]]

一个简单的解决方案是将每个条目添加到数组中matrices在 for 循环中为:

for i in range(len(matrices)):
    matrices[i] = [[A[i], B[i], C[i]],
            [D[i], E[i], F[i]],
            [G[i], H[i], J[i]]]

有人知道如何以更快、矢量化的方式避免 for 循环来完成此操作吗?如果存在一些智能索引操作什么的。


一种方法是将它们堆叠在列中np.column_stack并重塑np.reshape -

np.column_stack((A,B,C,D,E,F,G,H,J)).reshape(-1,3,3)

连接与np.concatenate众所周知,速度要快得多,因此将其与2D transpose并重塑——

np.concatenate((A,B,C,D,E,F,G,H,J)).reshape(9,-1).T.reshape(-1,3,3)

另一个与np.concatenate, 3D transpose并重塑——

np.concatenate((A,B,C,D,E,F,G,H,J)).reshape(3,3,-1).transpose(2,0,1)

运行时测试 -

In [59]: # Setup input arrays
    ...: N = 1000
    ...: A = np.random.randint(0,9,(N,))
    ...: B = np.random.randint(0,9,(N,))
    ...: C = np.random.randint(0,9,(N,))
    ...: D = np.random.randint(0,9,(N,))
    ...: E = np.random.randint(0,9,(N,))
    ...: F = np.random.randint(0,9,(N,))
    ...: G = np.random.randint(0,9,(N,))
    ...: H = np.random.randint(0,9,(N,))
    ...: J = np.random.randint(0,9,(N,))
    ...: 

In [60]: %timeit np.column_stack((A,B,C,D,E,F,G,H,J)).reshape(-1,3,3)
10000 loops, best of 3: 84.4 µs per loop

In [61]: %timeit np.concatenate((A,B,C,D,E,F,G,H,J)).reshape(9,-1).T.reshape(-1,3,3)
100000 loops, best of 3: 15.8 µs per loop

In [62]: %timeit np.concatenate((A,B,C,D,E,F,G,H,J)).reshape(3,3,-1).transpose(2,0,1)
100000 loops, best of 3: 14.8 µs per loop
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 9 个大小为 N 的数组快速创建 N 个 3x3 矩阵的数组? 的相关文章

随机推荐

  • arima.sim() 函数具有变化:样本大小、phi 值和 sd 值

    我想模拟ARIMA 1 1 0 随变化 样本量 phi值 标准偏差值 我很佩服下面的吼叫r代码只是模拟一个ARIMA 1 1 0 我想遵循格式来模拟许多ARIMA 1 1 0 随着变化的样本量 phi值 and 标准偏差值 wn lt rn
  • 无法执行不同的投影查询

    我有一个简单的小 观察 课 from google appengine ext import ndb class Observation ndb Model remote id ndb StringProperty dimension id
  • 在 MVC3 中使用 WebApi

    使用 WebApi 在 MVC 客户端中使用服务的最佳方式是什么 如果响应返回为
  • PHP数据库连接实践

    我有一个连接到多个数据库 Oracle MySQL 和 MSSQL 的脚本 每次脚本运行时可能不会使用每个数据库连接 但所有数据库连接都可以在单个脚本执行中使用 我的问题是 即使所有连接可能都没有被使用 最好在脚本开始时连接到所有数据库一次
  • 基于范围的 for 如何适用于普通数组?

    在 C 11 中 您可以使用基于范围的for 其作用为foreach其他语言的 它甚至适用于普通的 C 数组 int numbers 1 2 3 4 5 for int n numbers n 2 它如何知道何时停止 它是否仅适用于已在同一
  • 为什么同样的方法在 Swift 的数组扩展中会失败?

    当我尝试打电话时 我的行为很奇怪sort 从数组扩展中 例如此方法 func test let a 1 2 3 sort a x y in x lt y 可以单独工作 但在内部时会失败Array扩大 extension Array func
  • 从字节数组中创建新的 FileStream

    我正在尝试从字节数组创建一个新的 FileStream 对象 我确信这根本没有意义 所以我将在下面尝试更详细地解释 我正在完成的任务 1 读取之前的源文件压缩的2 使用GZipStream解压数据 3 将解压后的数据复制到字节数组中 我想改
  • Android 设备重启后广播接收器不工作

    我已经检查了所有相关问题 但没有找到解决此问题的方法 所以这对我来说绝对是一个新问题 我拥有的 我有一个 Android 应用程序 它在其清单中注册了一些广播接收器 这就是我的清单的样子
  • JavaFX:父级及其子级的鼠标单击事件

    我有一张卡片 由页眉 正文和页脚组成 可以包含更多节点 如标签 文本字段等 我需要抓住on mouse clicked单击发生时的任何时间事件卡内 无论它是卡本身还是它的子卡之一 现在 如果我单击文本字段 则不会触发事件 private S
  • 在发布的 Android 应用程序中完全禁用 LogCat 输出?

    关闭my own在将应用程序发布到市场之前 应用程序的 LogCat 输出非常简单 我还知道如何通过标签和 或 id 有选择地过滤 LogCat 消息 以方便我自己的调试 但现在我对一些可能更困难 也许不可能 的事情感兴趣 禁用所有 Log
  • 如何在zend框架中添加新类并自动加载

    我是 Zend 框架的新手 第一次使用它 我正在寻找可以在很短的时间内阅读的简单基础教程 如果我想在 Zend 库中添加新类 我也坚持这样做 当我制作任何新控制器时 它也应该自动加载 如果您有意见 请提出您的意见 Regards 这在一开始
  • 在基本身份验证 URL 中转义用户名字符

    使用http基本身份验证时 可以在URL中传递用户名 例如 http email protected path 但现在假设用户名是电子邮件地址 例如 电子邮件受保护 这样做显然是不明确的 http email protected foo c
  • LESS:您可以将 CSS 选择器与媒体查询分组吗?

    我真的很高兴发现您可以创建一个媒体查询变量 您可以轻松地重用该变量并使您的代码更具可读性 tablet min width 768px and max width 980px media tablet 我想知道是否可以将媒体查询与选择器分组
  • IBM Worklight - 如何更改默认的“Worklight 设置”字符串?

    有没有办法更改 Android 选项菜单中 Worklight 提供的默认 Work Light 设置 字符串 Update 稍微纠正一下答案 Yes 打开您的App is 位于yourProject apps yourApp common
  • 在eclipse中使用java库

    我对 eclipse 有点陌生 想要使用以下库 以便我可以使用它们实现的对象 HttpClient 和 Java csv 我如何导入这些库以便我可以用它们编写一些java http hc apache org downloads cgi h
  • 使用 JsonReader 而不是 JsonSerializer 时自定义 JsonConverter 不起作用

    我有课Foo和它的FooConverter定义如下 JsonConverter typeof FooConverter public class Foo public string Something get set public clas
  • 是否有一个 iOS“厨房水槽”应用程序可以在任何地方获取源代码? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在学习 iOS 开发
  • 带有 {fmt} 的自定义格式说明符用于自定义类

    在格式化我自己的自定义类型时 我将如何允许自定义填充等 struct S int x template lt gt struct fmt formatter
  • Sqlite 检查逗号分隔的数字字符串是否包含数字

    如何检查Sqlite中的字符串是否包含数字 该字符串是逗号分隔的正数 不以 0 开头 我需要检查它是否包含其他数字 Ex Is 5 in 1 2 1 gt 否 Is 5 in 35 55 15 gt 否 Is 5 in 5 gt 是的 Is
  • 如何从 9 个大小为 N 的数组快速创建 N 个 3x3 矩阵的数组?

    假设我有 9 个大小为 N 的数组 A B C J 我想创建一个由 N 3x3 矩阵组成的新数组 例如 matrices i A i B i C i D i E i F i G i H i J i 一个简单的解决方案是将每个条目添加到数组中