测试 numpy 数组是否对称?

发布于 2024-10-22 04:24:09 字数 277 浏览 3 评论 0原文

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

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

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

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

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

Is there a better pythonic way of checking if a ndarray is diagonally symmetric in a particular dimension? i.e for all of x

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

I'm sure I'm missing an (duh) answer but its 2:15 here... :)

EDIT: to clarify, I'm looking for a more 'elegant' way to do :

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦幻的心爱 2024-10-29 04:24:09

进行检查

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

如果我理解正确的话,你想在没有 Python 循环的情况下 。操作方法如下:

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

If I understand you correctly, you want to do the check

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

without the Python loop. Here is how to do it:

(arr.transpose(1, 0, 2) == arr).all()
夢归不見 2024-10-29 04:24:09

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

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

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

arr[np.isnan(arr)] = 0

If your array contains floats (especially if they're the result of a computation), use allclose

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

If some of your values might be NaN, set those to a marker value before the test.

arr[np.isnan(arr)] = 0
听,心雨的声音 2024-10-29 04:24:09

我知道你问过 NumPy。但是 SciPy(NumPy 姊妹包)有一个内置函数,称为 issymmetry,用于检查 2D NumPy 数组是否对称。你也可以使用它。

>>> from scipy.linalg import issymmetric
>>> import numpy as np
>>> a = np.arange(27).reshape(3,3,3)
>>> a
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]]])
>>> for i in range(a.shape[2]):
    issymmetric(a[:,:,i])

False
False
False
>>> 

I know you asked about NumPy. But SciPy, NumPy sister package, has a build-in function called issymmetric to check if a 2D NumPy array is symmetric. You can use it too.

>>> from scipy.linalg import issymmetric
>>> import numpy as np
>>> a = np.arange(27).reshape(3,3,3)
>>> a
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]]])
>>> for i in range(a.shape[2]):
    issymmetric(a[:,:,i])

False
False
False
>>> 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文