问题:我想.csv使用igraph 从存储在文件中的邻接矩阵制作加权无向图,然后对其进行最小生成树和其他算法.
我开始制作一个有10个顶点和5个边的有向图.默认情况下,igraph不允许边缘权重,你必须使用一些对我来说没有意义的属性(类似于igraph_i_set_attribute_table).
有人可以帮我解决这个问题.
void print_vector(igraph_vector_t *v, FILE *f) {
long int i;
for (i=0; i<igraph_vector_size(v); i++) {
fprintf(f, " %li", (long int) VECTOR(*v)[i]);
}
fprintf(f, "\n");
}
int main(int argc, char* argv[])
{
igraph_t g;
igraph_vector_t v;
int ret;
igraph_es_t es;
/* Initialize the vector for edges */
igraph_vector_init(&v,10);
VECTOR(v)[0]=0;VECTOR(v)[1]=1;
VECTOR(v)[2]=1;VECTOR(v)[3]=3;
VECTOR(v)[4]=1;VECTOR(v)[5]=5;
VECTOR(v)[6]=2;VECTOR(v)[7]=3;
VECTOR(v)[8]=2;VECTOR(v)[9]=5;
igraph_create(&g,&v,0,IGRAPH_DIRECTED);
print_vector(&v,stdout);
/* igraph_i_set_attribute_table(&igraph_cattribute_table); */
igraph_vector_destroy(&v);
igraph_destroy(&g);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我想将二进制向量(数百万个)聚类成 k 个簇。我使用汉明距离来查找初始簇的最近邻居(这也很慢)。我认为 K 均值聚类并不适合这里。问题在于计算某个初始聚类中心的最近邻(二元向量)的平均值,以更新质心。
第二种选择是使用 K-medoids,其中新的聚类中心是从最近邻居之一(最接近特定聚类中心的所有邻居的中心)中选择的。但发现这是另一个问题,因为最近邻居的数量也相当大。
有人可以指导我吗?
我有两组2维点,设置A和B.在集合A中,我有100个点,而集合B包含5000个点.对于集合A中的每个点,我想找到一个最近的邻居或从集合B中最接近它的点.我在集合B上构建了一个OpenCV kd-Tree,并使用集合A点作为查询点.
问题是对于集合A中的所有点,Kd树总是返回第一个点作为最近点.通过观察点我可以看到还有其他点比集合B的第一点更接近.
这是一些代码:
Mat matches; //This mat will contain the index of nearest neighbour as returned by Kd-tree
Mat distances; //In this mat Kd-Tree return the distances for each nearest neighbour
Mat ClusterMemebers; //This Set A
Mat ClusterCenters; //This set B
const cvflann::SearchParams params(32); //How many leaves to search in a tree
cv::flann::GenericIndex< cvflann::L2<int> > *kdtrees; // The flann searching tree
// Create matrices
ClusterCenters.create(cvSize(2,5000), CV_32S); // The set B
matches.create(cvSize(1,100), CV_32SC1);
distances.create(cvSize(1,100), CV_32FC1);
ClusterMembers.create(cvSize(2,100), CV_32S); // The set …Run Code Online (Sandbox Code Playgroud)