小编jgy*_*you的帖子

使用sed(或类似的东西)修改变量的内容

我写了一个BASH文件,其中包含表单的多个嵌入式循环

for P in {'0.10','0.20', [...] '0.90','1.00'}; do 
   for Q in {'0.10','0.20', [...] ,'0.90','1.00'}; do
    [...] 
Run Code Online (Sandbox Code Playgroud)

我将这些变量用作命令行应用程序的参数,并直接在BASH中创建文件名.我想创建重复项,比如$P_REP=0_10用一个下划线替换点而不为每个case写一个显式的switch语句,或者一些硬编码的等价物.我找到的(非优雅的方式)就是为了

  1. 将内容转储P,Q到临时文件.
  2. 使用下划线替换点sed 's/./_/ -i.
  3. 再次读取文件并将其内容加载到新变量.

因此,我想知道是否可以直接在变量的内容上运行sed like命令?

bash sed

6
推荐指数
2
解决办法
7415
查看次数

Boost :: graph(c ++)优于networkx(python)

编辑:正如@sehe指出的那样,错误位于中介中心性计算之前的某个位置.向前走!



我实现了一个最小的程序来计算的无向图的中介中心,在两个PythonC++.令人惊讶的是,networkx(Python)版本远远超过boost::graph(C++)实现,即使有人考虑加载开销等等.我做的事情是完全无效的吗?

Python代码的要点很简单

# load graph and start chrono
clist = nx.betweenness_centrality(g)
# output
Run Code Online (Sandbox Code Playgroud)

对于C++,我们有

typedef boost::adjacency_list<boost::vecS,
                              boost::vecS,
                              boost::undirectedS> Graph;

typedef boost::property_map< Graph, boost::vertex_index_t>::type VertexIndexMap;

int main() {
    Graph g;

    // ... 
    // load graph
    // ...

    VertexIndexMap v_index = get(boost::vertex_index, g);
    std::vector< double > vertex_property_vec(boost::num_vertices(g), 0.0);
    boost::iterator_property_map< std::vector< double >::iterator, VertexIndexMap >
          vertex_property_map(vertex_property_vec.begin(), v_index);


    boost::brandes_betweenness_centrality(g, vertex_property_map);

    // Output ...
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,两个库似乎都实现了完全相同的算法(Brandes 2001).

c++ boost boost-graph networkx

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

标签 统计

bash ×1

boost ×1

boost-graph ×1

c++ ×1

networkx ×1

sed ×1