小编Nig*_*Fox的帖子

在C/C++中的"igraph"中创建加权无向图

问题:我想.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)

c graph igraph minimum-spanning-tree weighted

5
推荐指数
1
解决办法
1885
查看次数

在 C++ 中执行 k 意味着在二进制向量上进行聚类的快速方法

我想将二进制向量(数百万个)聚类成 k 个簇。我使用汉明距离来查找初始簇的最近邻居(这也很慢)。我认为 K 均值聚类并不适合这里。问题在于计算某个初始聚类中心的最近邻(二元向量)的平均值,以更新质心。

第二种选择是使用 K-medoids,其中新的聚类中心是从最近邻居之一(最接近特定聚类中心的所有邻居的中心)中选择的。但发现这是另一个问题,因为最近邻居的数量也相当大。

有人可以指导我吗?

binary cluster-analysis vector hamming-distance

4
推荐指数
1
解决办法
2075
查看次数

为什么OpenCV KdTree总是在c ++中返回相同的最近邻居?

我有两组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)

c++ opencv kdtree nearest-neighbor

2
推荐指数
1
解决办法
4116
查看次数