簡體   English   中英

比較元組和numpy數組中的元組

[英]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.

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