如何调整原始矩阵以适配nearPSD函数将其转换为半正定矩阵
解决方法
报错的核心原因是你定义的A是Python原生嵌套列表,不存在numpy数组/矩阵专属的shape属性,而nearPSD函数内部第一行就调用了A.shape[0]获取矩阵维度,因此触发属性错误。
调整原始矩阵A的方式非常简单:只需要将原生列表转换为numpy支持的数组或矩阵类型即可,调整后的A定义代码如下:
# 方式一:转换为numpy数组(更常用) A = np.array([[phi_zero, phi_one], [1, 0]]) # 方式二:转换为numpy矩阵 A = np.matrix([[phi_zero, phi_one], [1, 0]])
调整后重新执行nearPSD(A=A)即可正常输出半正定矩阵结果。
如果想要避免后续传参时再出现同类问题,也可以在nearPSD函数开头增加一行自动类型转换的代码:
def nearPSD(A,epsilon=0): A = np.asarray(A) # 新增行,自动将输入转为numpy数组 n = A.shape[0] # 剩余原有代码保持不变
内容的提问来源于stack exchange,提问作者AlSub
相关产品推荐
相关产品推荐

