簡體   English   中英

測試 numpy 陣列是否對稱?

[英]testing if a numpy array is symmetric?

是否有更好的 Pythonic 方法來檢查 ndarray 在特定維度上是否對角對稱? 即對於所有的 x

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

我確定我錯過了一個(duh)答案,但這里是 2:15 ...... :)

編輯:澄清一下,我正在尋找一種更“優雅”的方式來做:

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

如果我理解正確,你想做檢查

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

沒有Python循環。 這是怎么做的:

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

如果您的數組包含浮點數(特別是如果它們是計算的結果),請使用allclose

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

如果您的某些值可能是NaN ,請在測試之前將其設置為標記值。

arr[np.isnan(arr)] = 0

我知道你問過 Z3B7F949B2343F9E5390​​E29F6EF5E1778Z。 But SciPy, Z3B7F949B2343F9E5390​​E29F6EF5E1778Z sister package, has a build-in function called issymmetric to check if a 2D Z3B7F949B2343F9E5390​​E29F6EF5E1778Z array is symmetric. 你也可以使用它。

>>> 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
>>> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM