[英]compare tuple with tuples in numpy array
我有一個數組(dtype = object),第一列包含數組的元組,第二列包含標量。 我想要第二列中的所有標量,其中第一列中的元組等於某個元組。
說
>>> X
array([[(array([ 21.]), array([ 13.])), 0.29452519286647716],
[(array([ 25.]), array([ 9.])), 0.9106600600510809],
[(array([ 25.]), array([ 13.])), 0.8137344043493814],
[(array([ 25.]), array([ 14.])), 0.8143093864975313],
[(array([ 25.]), array([ 15.])), 0.6004337591112664],
[(array([ 25.]), array([ 16.])), 0.6239450452872853],
[(array([ 21.]), array([ 13.])), 0.32082105959687424]], dtype=object)
我想要第一行等於X [0,0]的所有行。
ar = X[0,0]
>>> ar
(array([ 21.]), array([ 13.]))
我檢查X[:,0]==ar
應該找到我那些行。 然后,我本可以通過X[X[:,0]==ar,1]
檢索最終結果。
但是,似乎發生的事情是ar
被解釋為二維數組,並且ar
每個單個元素都與X[:,0]
的元組進行了比較。 在這種情況下,這將產生一個2x7數組,所有條目等於False
。 相反,比較X[0,0]==ar
工作方式與我希望給定值True
。
為什么會發生這種情況,我該如何解決它才能獲得理想的結果?
使用列表推導進行比較:
In [176]: [x==ar for x in X[:,0]]
Out[176]: [True, False, False, False, False, False, True]
這是將元組與元組進行比較
比較元組ID會得出不同的結果
In [175]: [id(x)==id(ar) for x in X[:,0]]
Out[175]: [True, False, False, False, False, False, False]
因為第二場比賽的ID不同。
In [177]: X[:,0]==ar
Out[177]:
array([[False, False, False, False, False, False, False],
[False, False, False, False, False, False, False]], dtype=bool)
返回(2,7)
結果,因為將(7,)
數組與(2,1)
數組( np.array(ar)
)進行比較是有效的。
但這就像理解:
In [190]: ar1=np.zeros(1,dtype=object)
In [191]: ar1[0]=ar
In [192]: ar1
Out[192]: array([(array([ 21.]), array([ 13.]))], dtype=object)
In [193]: X[:,0]==ar1
Out[193]: array([ True, False, False, False, False, False, True], dtype=bool)
art1
是包含ar
元組的1元素數組。 現在,與X[:,0]
元素的比較按預期進行。
np.array(...)
嘗試創建輸入數據允許的最大維度數組。 這就是為什么它將2元素元組轉換為2元素數組的原因。 我必須進行兩步分配才能解決該默認設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.