對于以下輸入:
import numpy as np
a= np.array([[0.0, 0.0, 0.0],
[1.0, 1.0, -2.234],
[0.0, 0.0, 0.0]])
b= np.array([1.0, 1.0, -2.234])
print(np.isclose(np.transpose(a), b))
輸出:
$ python temp.py
--> [[False True False]
[False True False]
[False False False]]
對于以下輸入:
print(np.isclose(a, b))
輸出:
$ python temp.py
--> [[False False False]
[ True True True]
[False False False]]
我無法理解為什么np.isclose()無法按元素匹配列,但能夠正確地對行進行匹配。我認為我的理解有問題。
我的目的是找到匹配列的索引。為了實作這一點,我將進一步使用.all(axis=)with np.where()。但在此之前,我想了解np.isclose().
uj5u.com熱心網友回復:
考慮您的轉置陣列a和b:
[[ 0. 1. 0. ]
[ 0. 1. 0. ]
[ 0. -2.234 0. ]]
[ 1. 1. -2.234]
所做的是根據廣播np.isclose逐行比較(在給定的容差范圍內)每個元素a與每個元素,這會導致輸出:b
[[False True False]
[False True False]
[False False False]]
如果要“按列”比較陣列,則應顯式向b. 陣列a,b然后看起來像這樣:
[[ 0. 1. 0. ]
[ 0. 1. 0. ]
[ 0. -2.234 0. ]]
[[ 1. ]
[ 1. ]
[-2.234]]
然后你可以看看它們是否相等:
import numpy as np
a= np.array([[0.0, 0.0, 0.0],
[1.0, 1.0, -2.234],
[0.0, 0.0, 0.0]])
b = np.array([1.0, 1.0, -2.234])
a = np.transpose(a)
b = np.expand_dims(b , axis=-1)
print(np.isclose(a, b))
[[False True False]
[False True False]
[False True False]]
uj5u.com熱心網友回復:
a= np.array([[0.0, 0.0, 0.0],
[1.0, 1.0, -2.234],
[0.0, 0.0, 0.0]])
b= np.array([1.0, 1.0, -2.234])
print(np.isclose(np.transpose(a), b))
這解決了
np.isclose([[0.0, 1.0, 0.0],
[0.0, 1.0, 0.0],
[0.0, -2.234, 0.0]],
[[1.0, 1.0, -2.234],
[1.0, 1.0, -2.234],
[1.0, 1.0, -2.234]])
--> [[False True False]
[False True False]
[False False False]]
并np.isclose(a, b)決心
np.isclose([[0.0, 0.0, 0.0],
[1.0, 1.0, -2.234],
[0.0, 0.0, 0.0]],
[[1.0, 1.0, -2.234],
[1.0, 1.0, -2.234],
[1.0, 1.0, -2.234]])
--> [[False False False]
[ True True True]
[False False False]]
您可以使用以下方法檢查是否b真的被廣播到該二維陣列np.broadcast_to(b, a.shape)
uj5u.com熱心網友回復:
np.isclose只需檢查這些值是否足夠接近,您可以認為它們與給定閾值相等
通過做:
np.isclose(np.transpose(a), b)
您將 aT 的每一列與 b 的每一列進行比較。第一列[0,0,0]不接近(即幾乎等于)1。對于第二列[1,1,-2.234],前 2 個值等于1。對于最后一列[0,0,0],沒有匹配項-2.234。
[[False True False]
[False True False]
[False False False]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/433839.html
