gpt4 book ai didi

python - 以特定方式多次连接两个矩阵

转载 作者:行者123 更新时间:2023-12-04 10:13:20 25 4
gpt4 key购买 nike

Suppose we have two square matrices "x" and "y" of dimension nxn and a numeric variable "a". I want to concatenate those matrices a number of times depending on the parameter "a", so to obtain a bigger square matrix "xy". This new matrix will contain only copies of the first two matrices arranged in the following way : matrix "x" on the main diagonal of the new matrix "xy" and matrix "y" in all other entries of the matrix "xy".



这里有一些例子来澄清这个问题:

输入:两个 2x2 矩阵
x=np.array([[1,1],[1,1]])
y=np.array([[2,2],[2,2]])


a=2预期输出:
xy=np.array([[1,1,2,2],
[1,1,2,2],
[2,2,1,1],
[2,2,1,1]])

a=3预期输出:
xy=np.array([[1,1,2,2,2,2],
[1,1,2,2,2,2],
[2,2,1,1,2,2],
[2,2,1,1,2,2],
[2,2,2,2,1,1],
[2,2,2,2,1,1]])`

我正在寻找的是带有 a=n 的通用案例的代码

最佳答案

一种可能的方法可能是。

给定 x , y和串联因子 a ,先创建一个block diagonal矩阵Xa x 块,然后取所有 non zero索引X_idx其中,即块对角线元素的索引。在这里,我想你的 x不包含零分量。

现在,创建一个矩阵 Y ,这只是一个 tile形状(a,a)y块。最后,让我们制作Y的对角块通过应用 X_idx 为零屏蔽它并求和 XY获得所需的 XY矩阵。它跟随:

import numpy as np
from scipy.linalg import block_diag

x = np.array([[1,1],[1,1]])
y = np.array([[2,2],[2,2]])
a = 3

X = block_diag(*[x]*a)
X_idx = np.nonzero(X)
Y = np.tile(y,(a,a))
Y[X_idx] = 0
XY = X + Y

输出相应的 XY
>>> array([[1, 1, 2, 2, 2, 2],
[1, 1, 2, 2, 2, 2],
[2, 2, 1, 1, 2, 2],
[2, 2, 1, 1, 2, 2],
[2, 2, 2, 2, 1, 1],
[2, 2, 2, 2, 1, 1]])

万一 x有零值,只需替换 np.nonzero调用:
X_idx = (np.repeat(np.arange(a*x.shape[0]),x.shape[0]),
np.r_[[np.tile(np.arange(i,i+x.shape[0]),x.shape[0]) for i in range(0,a*x.shape[0],x.shape[0])]].ravel())

关于python - 以特定方式多次连接两个矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61209038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com