gpt4 book ai didi

python - 托普利兹矩阵的托普利兹矩阵

转载 作者:太空狗 更新时间:2023-10-30 02:42:27 25 4
gpt4 key购买 nike

我想创建一个 toeplitz 矩阵的 toeplitz 矩阵。H1、H2 和 H3 已经是托普利茨矩阵。我的结果应该是这样的:
H1 0 0
H2 H1 0
H3 H2 H1
0 H3 H2
0 0 H3

现有的 toeplitz 函数只接受向量,所以我不能将它用于矩阵。目前我正在使用 vstack 创建第一列,然后是第二列等等,然后我使用 hstack 合并所有列。这需要很多努力,因为我必须在某些地方专门添加 np.zeros 矩阵。我想不出更好的方法来连接 numpy 数组,因为只有几个函数可以解决这个问题,而且没有一个真正适合我的问题。

最佳答案

与其嵌套调用vstackhstack,预分配最终数组,然后使用嵌套循环填充数组会更高效。您最初可以使用更高维的数组来保持代码整洁。

比如这个脚本

import numpy as np

H1 = np.array([[11, 11], [11, 11]])
H2 = np.array([[22, 22], [22, 22]])
H3 = np.array([[33, 33], [33, 33]])

inputs = (H1, H2, H3)

# This assumes all the arrays in `inputs` have the same shape,
# and that the data type of all the arrays is the same as H1.dtype.
nh = len(inputs)
nrows = 2*nh - 1
m, n = H1.shape
# T is a 4D array. For a given i and j, T[i, :, j, :] is a 2D array
# with shape (m, n). T can be intepreted as a 2D array of 2D arrays.
T = np.zeros((nrows, m, nh, n), dtype=H1.dtype)
for i, H in enumerate(inputs):
for j in range(nh):
T[i + j, :, j, :] = H

# Partially flatten the 4D array to a 2D array that has the desired
# block structure.
T.shape = (nrows*m, nh*n)

print(T)

打印

[[11 11  0  0  0  0]
[11 11 0 0 0 0]
[22 22 11 11 0 0]
[22 22 11 11 0 0]
[33 33 22 22 11 11]
[33 33 22 22 11 11]
[ 0 0 33 33 22 22]
[ 0 0 33 33 22 22]
[ 0 0 0 0 33 33]
[ 0 0 0 0 33 33]]

(请注意,结果不是 Toeplitz 矩阵;它是 block Toeplitz matrix 。)

关于python - 托普利兹矩阵的托普利兹矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36464191/

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