【发布时间】:2017-08-12 00:15:11
【问题描述】:
我正在尝试使用参数(a,tol=1e-8) 创建一个函数,该函数返回一个布尔值,告诉用户矩阵是否对称(对称矩阵等于其转置)。到目前为止,我有:
def check_symmetric(a, tol=1e-8):
if np.transpose(a, axes=axes) == np.transpose(a, axes=axes):
return True
def sqr(s):
rows = len(s)
for row in sq:
if len(row) != rows:
return False
return True
if a != sqr(s):
raise ValueError
虽然我不断收到axes isn't defined 消息,所以我很确定这根本不起作用......我想通过的测试是:
e = np.eye(4)
f = np.diag([1], k=3)
g = e[1:, :]
print(check_symmetric(e))
print(not check_symmetric(e + f))
print(check_symmetric(e + f * 1e-9))
print(not check_symmetric(e + f * 1e-9, 1e-10))
try:
check_symmetric(g)
print(False)
except ValueError:
print(True)
感谢任何帮助,谢谢!
【问题讨论】:
-
假设你的矩阵只是二维的,你不需要轴关键字。此外,您应该保持一个矩阵未转置,然后检查矩阵的转置。目前,您正在检查两个转置矩阵的相等性。
-
昨天关于对称矩阵测试的问题:stackoverflow.com/questions/42876082/…
-
哦,谢谢你的链接......虽然我开始让它有点工作,即使我的测试不太正确:
def check_symmetric(a, tol=1e-8): if np.transpose(a.any()) == np.array(a.any()): return True def sqr(s): rows = len(s) for row in sq: if len(row) != rows: return False return True if a != sqr(s): raise ValueError
标签: python python-3.x numpy matrix