【问题标题】:testing if a numpy array is symmetric?测试一个numpy数组是否对称?
【发布时间】:2011-07-16 06:34:20
【问题描述】:

有没有更好的 Pythonic 方法来检查 ndarray 在特定维度上是否对角对称?即对于所有 x

(arr[:,:,x].T==arr[:,:,x]).all()

我确定我错过了一个(呃)答案,但这里是 2:15... :)

编辑:澄清一下,我正在寻找一种更“优雅”的方式:

for x in range(xmax):
    assert (arr[:,:,x].T==arr[:,:,x]).all()

【问题讨论】:

  • 我认为你的方法是完全合理的,我想不出一个测试对称性的内置函数会以更简洁/有效的方式做到这一点。

标签: python matrix numpy


【解决方案1】:

如果您的数组包含浮点数(特别是如果它们是计算的结果),请使用allclose

np.allclose(arr.transpose(1, 0, 2), arr)

如果您的某些值可能是 NaN,请在测试前将其设置为标记值。

arr[np.isnan(arr)] = 0

【讨论】:

  • @Picarus 谢谢。修复。 :)
  • 如果我没记错的话,np.transpose 不应该改变值,只改变它们的位置,所以它们应该真的相等。
  • @moi allclose 仅当您在浮点数上进行测试并且这些浮点数是计算或其他潜在的精度降低操作的结果时才需要。但是,一般来说,这是一个避免意外的好习惯。
【解决方案2】:

如果我理解正确的话,你想做检查

all((arr[:,:,x].T==arr[:,:,x]).all() for x in range(arr.shape[2]))

没有 Python 循环。操作方法如下:

(arr.transpose(1, 0, 2) == arr).all()

【讨论】:

    猜你喜欢
    • 2013-08-26
    • 2012-08-29
    • 2015-02-28
    • 1970-01-01
    • 2015-12-28
    • 2019-06-04
    • 2018-02-16
    • 2015-01-14
    • 2010-10-29
    相关资源
    最近更新 更多