在python中使用sparse.block_diag的尺寸错误

问题描述 投票:0回答:1

我正在尝试使用以下函数创建块对角矩阵:

 mo = sparse.block_diag([np.exp(-1j*A)*np.cos(A), *[B for _ in range(int(N/2-1))], np.exp(-1j*A)*np.cos(A)])

其中 B 是 2x2 矩阵,A 是数字。不知怎的,这个错误,说:

所有输入数组必须具有相同的维数,但索引 0 处的数组有 1 个维度,索引 1 处的数组有 2 个维度

我该如何解决这个问题?预先感谢!

以前这对其他号码有效,但我不确定为什么现在不起作用。

python
1个回答
0
投票

函数

sparse.block_diag
期望所有输入矩阵具有相同的维数。

在您的情况下,

np.exp(-1j*A)*np.com(A)
01 维数组,具体取决于上下文,而
B
2 维数组。

  1. 标量转换为2维矩阵。
  2. 检查您的列表的结构是否为
    sparse.block_diag
    确保所有矩阵都是 2 维。

实现示例:

import numpy as np
from scipy import sparse
A = 1.5
B = np.array([[1, 2], [3, 4]])
N = 5
scalar_matrix = np.exp(-1j * A) * np.cos(A) * np.eye(2)
matrices = [scalar_matrix] + [B for _ in range(int(N/2-1))] + [scalar_matrix]
mo = sparse.block_diag(matrices)
dense_mo = mo.toarray()
print(dense_mo)
© www.soinside.com 2019 - 2024. All rights reserved.