numpy 中的对角线堆叠?

2024-03-09

因此 numpy 有一些方便的函数可以将多个数组合并为一个,例如hstack 和 vstack。我想知道是否有类似的东西,但用于对角堆叠组件数组?

假设我有 N 个形状为 (n_i, m_i) 的数组,并且我想将它们组合成一个大小为 (sum_{1,N}n_i, sum_{1,N}m_i) 的数组,以便组件数组形成块结果数组的对角线。

是的,我知道如何手动解决它,例如使用中描述的方法如何将一个小 numpy 数组“嵌入”到一个大 numpy 数组的预定义块中? https://stackoverflow.com/questions/7115437/how-to-embed-a-small-numpy-array-into-a-predefined-block-of-a-large-numpy-array。只是想知道是否有更简单的方法。

Ah, 如何将块转换为块对角矩阵(NumPy) https://stackoverflow.com/questions/4154253/how-can-i-transform-blocks-into-a-blockdiagonal-matrix-numpy提到 scipy.linalg.block_diag() 是解决方案,只是我的工作站上安装的 scipy 版本太旧了,没有它。还有其他想法吗?


看来确实block_diag正是你想要的。因此,如果由于某种原因你无法更新 scipy,那么这里是来自v0.8.0如果你想简单地定义它!

import numpy as np

def block_diag(*arrs):
    """Create a block diagonal matrix from the provided arrays.

    Given the inputs `A`, `B` and `C`, the output will have these
    arrays arranged on the diagonal::

        [[A, 0, 0],
         [0, B, 0],
         [0, 0, C]]

    If all the input arrays are square, the output is known as a
    block diagonal matrix.

    Parameters
    ----------
    A, B, C, ... : array-like, up to 2D
        Input arrays.  A 1D array or array-like sequence with length n is
        treated as a 2D array with shape (1,n).

    Returns
    -------
    D : ndarray
        Array with `A`, `B`, `C`, ... on the diagonal.  `D` has the
        same dtype as `A`.

    References
    ----------
    .. [1] Wikipedia, "Block matrix",
           http://en.wikipedia.org/wiki/Block_diagonal_matrix

    Examples
    --------
    >>> A = [[1, 0],
    ...      [0, 1]]
    >>> B = [[3, 4, 5],
    ...      [6, 7, 8]]
    >>> C = [[7]]
    >>> print(block_diag(A, B, C))
    [[1 0 0 0 0 0]
     [0 1 0 0 0 0]
     [0 0 3 4 5 0]
     [0 0 6 7 8 0]
     [0 0 0 0 0 7]]
    >>> block_diag(1.0, [2, 3], [[4, 5], [6, 7]])
    array([[ 1.,  0.,  0.,  0.,  0.],
           [ 0.,  2.,  3.,  0.,  0.],
           [ 0.,  0.,  0.,  4.,  5.],
           [ 0.,  0.,  0.,  6.,  7.]])

    """
    if arrs == ():
        arrs = ([],)
    arrs = [np.atleast_2d(a) for a in arrs]

    bad_args = [k for k in range(len(arrs)) if arrs[k].ndim > 2]
    if bad_args:
        raise ValueError("arguments in the following positions have dimension "
                            "greater than 2: %s" % bad_args) 

    shapes = np.array([a.shape for a in arrs])
    out = np.zeros(np.sum(shapes, axis=0), dtype=arrs[0].dtype)

    r, c = 0, 0
    for i, (rr, cc) in enumerate(shapes):
        out[r:r + rr, c:c + cc] = arrs[i]
        r += rr
        c += cc
    return out
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

numpy 中的对角线堆叠? 的相关文章

随机推荐

  • 如何禁用/删除android活动标签和标签栏?

    无论如何 是否可以删除应用程序标签中默认设置的活动标签栏和标签本身 我想从我的设计中获得完整的布局 并且需要删除顶部布局中的标签栏和标签 您可以通过设置来实现这一点android theme归因于 android style Theme N
  • 我可以使用 http2 将响应流式传输回浏览器吗?

    是否可以使用 http2 将响应从节点流式传输回浏览器 在我的网络应用程序中 用户按下一个按钮来启动服务器进程 此过程可能需要 10 分钟或更长时间才能完成 我想将状态更新流回客户端 浏览器 我相信我可以使用 websockets 做到这一
  • 在动态 DNS 后面使用 git

    我在一台具有动态 DNS 地址的计算机上有一个 git 存储库 它的 IP 地址每隔几天更改一次 每个涉及与机器通信的 git 操作都会产生以下警告 反向映射检查 getaddrinfo 对于 1 2 3 4 isp net 1 2 3 4
  • 以下是 xml 中的标准日期/时间

    是 2011 03 09T08 48 36 223Z 标准xsd 日期类型吗 T 和 Z 是什么意思 Z 是祖鲁时间 与 UTC 相同 我认为T只是代表 时间 and yes it s the xsd standard date accor
  • 函数参数之前的 class 关键字是什么?

    为什么这段代码有效 请参阅class前面的关键字f函数参数 如果我添加它会改变什么 struct A int i void f class A pA why class here cout lt lt pA i lt lt endl int
  • 为什么在 C 中将类型定义为指向未定义结构的指针是有效的?

    我正在深入研究第三方代码库 发现将类型声明为指向未定义结构的指针显然是有效的 作为一个最小的工作示例 考虑一个 C 文件test c不包含任何内容 但 typedef struct foo bar 令我惊讶的是 使用命令编译该文件没有任何问
  • 在 OS X 上编译 C 程序以在 Linux 上运行

    我有一个非常简单的 C 程序 它仅使用标准库函数进行一些加密计算 我将在 Ubuntu 10 04 32 位 上运行该程序 并使用带 m32 标志的 cc 在 OS X 10 6 上编译它 当我尝试在 Ubuntu 上运行它时 收到错误消息
  • GoogleJsonResponseException:401 未经授权的具有 OAuth2 保护的调用端点

    我正在尝试制作一个以 App Engine 作为移动后端的 Android 应用程序 当我尝试调用受身份验证保护的端点时 出现此错误 12 21 18 58 05 120 4452 4477 com test myapplication W
  • 压缩库的建议是在不考虑 cpu 开销的情况下使 byte[] 尽可能小?

    如果我的做法是错误的 请纠正我 但我有一个队列服务器和一群在集群中运行的 java 工作线程 我的队列中的工作单位很小 但数量很多 到目前为止 我的基准测试和对工作人员的审查表明我的速度约为 200mb 秒 所以我试图找出如何通过我的带宽获
  • Excel 中的分层自动编号(三级)

    如果我们有一个三级层次结构并且只需要枚举 B 根据模式 但某些 C 会干扰 B 该怎么办 Problem 获取列B给定列的结果A A B 1 B 2 B 3 A B 1 B 2 A B 1 B 2 B 3 P S 该任务是由于需要枚举 Ex
  • 在 laravel eloquent 中获取除当前登录用户之外的所有用户

    我在做 User all 从用户表中获取所有用户 我想选择除当前登录用户之外的所有用户 我该怎么做呢 就像是 User where id currentUser gt id gt get 提前致谢 Using except 会更流畅地完成同
  • 如何在 iOS 上使用平面表情符号

    我正在尝试向 UITableViewRowAction 标题添加表情符号 unicode 字符 这样我就不需要使用第三方库来添加图像 经过我的讨论HERE https stackoverflow com a 32735211 1030580
  • Android 版 facebook sdk 中的示例始终显示语言为“印尼语”的身份验证页面

    我使用 Android 设备运行 facebook sdk for android 中的简单示例项目 应用程序身份验证页面始终采用 印度尼西亚语 语言 我更改了 Android 设备的语言 英语和中文 但它仍然以 印度尼西亚语 显示 我使用
  • 有没有办法对可变参数宏参数使用 C++ 预处理器字符串化?

    我的猜测是这个问题的答案是否定的 但如果有办法的话那就太棒了 为了澄清一下 假设我有以下宏 define MY VARIADIC MACRO X Does some stuff here in the macro definition 我想
  • MapReduce:ChainMapper 和 ChainReducer

    我需要将 MapReduce jar 文件拆分为两个作业 以获得两个不同的输出文件 每个文件来自两个作业的每个减速器 我的意思是第一个作业必须生成一个输出文件 该文件将作为链中第二个作业的输入 我在 hadoop 版本 0 20 中读到了一
  • 无法从 HEAD 历史记录确定上游 SVN 信息

    为什么我会收到此错误消息 我收到这条消息是因为克隆了 svn repo no metadata选项 也许您的问题也是如此 当在没有该选项的情况下克隆它时 一切都很好 The no metadata该选项旨在在新版本出现时克隆 SVN 存储库
  • Spring Boot gradle 构建 - 无效源版本:11

    我正在尝试使用以下命令构建我的 Spring Boot 项目 gradlew build 但它不断抛出这个错误 Execution failed for task compileJava invalid source release 11
  • 为什么并发 TS 的部分内容没有采用 C++17?

    根据黄明德 https wongmichael com category c 显然 尽管已完成 但并发 TS 并未进入 虽然有实现经验 但刚刚批准 太新鲜 无法投票添加到 C 17 我最喜欢的提案最初是在N3327 http www ope
  • 将 stderr 和 stdout 复制到文件以及 ksh 中的屏幕

    我正在寻找一种解决方案 类似于下面的 bash 代码 除了 Solaris 上 ksh 中的屏幕之外 还将 stdout 和 stderr 复制到文件中 以下代码在 bash shell 中运行良好 usr bin bash Clear t
  • numpy 中的对角线堆叠?

    因此 numpy 有一些方便的函数可以将多个数组合并为一个 例如hstack 和 vstack 我想知道是否有类似的东西 但用于对角堆叠组件数组 假设我有 N 个形状为 n i m i 的数组 并且我想将它们组合成一个大小为 sum 1 N