互惠关系的Numpy或python过滤器数据集

时间:2016-05-10 18:21:40

标签: python numpy

我有一个我需要过滤的数据集,甚至不确定如何解决问题。以下是一个示例数据集:

Id1     Id2
1006    1244
1006    1245
1006    1246
1244    1006
1245    1006
1246    1006
...     ...

数据代表两个人之间的关系。我不需要保留关系的双方。所以,如果我有1006和1244之间的关系,我也不需要1244和1006之间的关系。所以我需要过滤掉所有与numpy / python的冗余关系。有任何想法吗?? Set_index和地图? 谢谢!

3 个答案:

答案 0 :(得分:0)

如果2-column2D NumPy broadcasting数组,那么使用A[~(np.triu((A[:,None,0] == A[:,1]) & (A[:,None,1] == A[:,0]))).any(0)] 启发此other solution for a MATLAB question的方法 -

from scipy.spatial.distance import cdist

out = A[~np.triu(cdist(A,A[:,::-1])==0).any(0)]

也可以使用非常高效的scipy's cdist,就像这样 -

In [162]: A
Out[162]: 
array([[1006, 1244],
       [1006, 1245],
       [2222, 7777],
       [1006, 1246],
       [1244, 1006],
       [1245, 1006],
       [1244, 9999],
       [1246, 1006],
       [8888, 4444]])

In [163]: A[~(np.triu((A[:,None,0] == A[:,1]) & (A[:,None,1] == A[:,0]))).any(0)]
Out[163]: 
array([[1006, 1244],
       [1006, 1245],
       [2222, 7777],
       [1006, 1246],
       [1244, 9999],
       [8888, 4444]])

In [164]: A[~np.triu(cdist(A,A[:,::-1])==0).any(0)]
Out[164]: 
array([[1006, 1244],
       [1006, 1245],
       [2222, 7777],
       [1006, 1246],
       [1244, 9999],
       [8888, 4444]])

示例运行 -

if(flag==false)
        {
            mp=MediaPlayer.create(this, R.raw.abc);
            mp.start();
            playbutton.setText("Pause");
            flag=true;
        }
        else if(mp.isPlaying()&&flag==true)
        {
            mp.pause();
            playbutton.setText("Play");
            flag=false;
        }

答案 1 :(得分:0)

numpy_indexed包可以用来有效地解决这些问题(免责声明:我是它的作者)。

假设A是包含两列的数组:

object instance = Activator.CreateInstance(type, "connection_string_param");
instance.GetType().GetMethod("DoSomething").Invoke(instance, null);

答案 2 :(得分:-1)

set(map(sorted, dataset))

如果数据集很大而你正在使用python 2,则更喜欢生成器理解而不是map