首页 文章

将元组与numpy数组中的元组进行比较

提问于
浏览
0

我有一个数组(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)

我想要第1列等于X [0,0]的所有行 .

ar = X[0,0]
>>> ar
(array([ 21.]), array([ 13.]))

我要检查 X[:,0]==ar 应该找到我那些行 . 然后我会通过 X[X[:,0]==ar,1] 检索我的最终结果 .

然而,似乎发生的事情是 ar 被解释为2维数组,并且 ar 中的每个单元素与 X[:,0] 中的元组进行比较 . 在这种情况下,这产生一个2x7数组,所有条目等于 False . 相比之下,比较 X[0,0]==ar 就像我希望它给出 True 的值一样 .

为什么会发生这种情况,如何解决它以获得所需的结果?

1 回答

  • 2

    使用列表理解的比较:

    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]
    

    因为第二场比赛有不同的身份证 .

    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元素数组的原因 . 我不得不做两步分配来绕过那个默认值 .

相关问题