我有一个我需要过滤的数据集,甚至不确定如何解决问题。以下是一个示例数据集:
Id1 Id2
1006 1244
1006 1245
1006 1246
1244 1006
1245 1006
1246 1006
... ...
数据代表两个人之间的关系。我不需要保留关系的双方。所以,如果我有1006和1244之间的关系,我也不需要1244和1006之间的关系。所以我需要过滤掉所有与numpy / python的冗余关系。有任何想法吗?? Set_index和地图? 谢谢!
答案 0 :(得分:0)
如果2-column
是2D
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