我正在尝试使用以下函数创建块对角矩阵:
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 个维度
我该如何解决这个问题?预先感谢!
以前这对其他号码有效,但我不确定为什么现在不起作用。
函数
sparse.block_diag
期望所有输入矩阵具有相同的维数。
在您的情况下,
np.exp(-1j*A)*np.com(A)
是 0 或 1 维数组,具体取决于上下文,而 B
是 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)