小编Sar*_*rah的帖子

svg/d3中轴转换的语法

我有一个非常基本的语法问题.我一直在学习d3,SVG和Javascript,主要是通过编辑别人的代码,这很有挑战性.

目标是在更新数据和基于数据的比例后更新y轴.我希望轴 - 刻度线和标签以及所有 - 转换为数据域.轴未更新.问题可能与范围有关,或者我引用了错误的SVG元素.(实际上有几个地块同时更新,但我只关注其中一个的轴.)

 
function makeYaxis (chart, scale, nticks, label, width, height, xmf, visName)
{
    var yAxis = d3.svg.axis()
    .scale(scale)
    .orient("left")
    .ticks(nticks);
    chart.append("svg:g")
    .attr("class","y axis")
    .append("g")
    .attr("transform","translate(60,1)") // fix magic #
    .call(yAxis);
    var xMove = xmf.yylMarginFactor * width - 1;
    var yMove = (((1 - xmf.xxbMarginFactor) * height + 
          xmf.xxtMarginFactor * height) / 2);
    chart.append("svg:text")
    .attr("class", visName + "xLabel")
    .attr("x", 0)
    .attr("y", 0)
    .attr("dy", "-2.8em")
    .text(label)
    .attr("transform", "rotate(-90) translate(-" + yMove + "," + xMove + ")");
} …
Run Code Online (Sandbox Code Playgroud)

javascript svg d3.js

15
推荐指数
1
解决办法
8290
查看次数

Boost MultiIndex - 对象或指针(以及如何使用它们?)?

我正在编写一个基于代理的模拟,并且已经确定Boost的MultiIndex可能是我的代理最有效的容器.我不是一个专业的程序员,我的背景很不稳定.我有两个问题:

  1. 容器Host本身是否包含代理(类)是否更好,或容器容纳更高效Host *?主机有时会从内存中删除(这是我的计划,无论如何......需要阅读new并且delete).主机的私有变量会偶尔更新,我希望通过modifyMultiIndex中的函数来完成.模拟中不会有其他主机副本,即它们不会在任何其他容器中使用.
  2. 如果我使用指向主机的指针,如何正确设置密钥提取?我的代码不能编译.
// main.cpp - ATTEMPTED POINTER VERSION
...
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/hashed_index.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/mem_fun.hpp>
#include <boost/tokenizer.hpp>

typedef multi_index_container<
  Host *,
  indexed_by< 
    // hash by Host::id
    hashed_unique< BOOST_MULTI_INDEX_MEM_FUN(Host,int,Host::getID) > // arg errors here
    > // end indexed_by
  > HostContainer;

...
int main() {

   ...
   HostContainer testHosts;
   Host * newHostPtr;
   newHostPtr = new Host( t, DOB, idCtr, 0, currentEvents );
   testHosts.insert( newHostPtr );
   ... 
} …
Run Code Online (Sandbox Code Playgroud)

c++ hash boost

7
推荐指数
1
解决办法
5346
查看次数

擦除和修改Boost MultiIndex容器中的元素

我正在尝试在模拟中使用Boost MultiIndex容器.我对C++语法的了解非常薄弱,我担心我没有正确地从容器中删除元素或从内存中删除它.我还需要修改元素,我也希望在此确认语法和基本哲学.

// main.cpp
...
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/hashed_index.hpp>
#include <boost/multi_index/member.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/mem_fun.hpp>
#include <boost/tokenizer.hpp>
#include <boost/shared_ptr.hpp>
...
#include "Host.h" // class Host, all members private, using get fxns to access

using boost::multi_index_container;
using namespace boost::multi_index;

typedef multi_index_container<
  boost::shared_ptr< Host >,
  indexed_by< 
    hashed_unique< const_mem_fun<Host,int,&Host::getID> >
    //   ordered_non_unique< BOOST_MULTI_INDEX_MEM_FUN(Host,int,&Host::getAge) >
    > // end indexed_by
  > HostContainer;

typedef HostContainer::nth_index<0>::type HostsByID;

int main() {
   ...
   HostContainer allHosts;
   Host * newHostPtr;
   newHostPtr = new Host( t, DOB, idCtr, 0, currentEvents );
   allHosts.insert( …
Run Code Online (Sandbox Code Playgroud)

c++ boost

7
推荐指数
1
解决办法
6550
查看次数

与const char*[]声明关联的重复符号错误

我喜欢帮助诊断我尝试使用g ++ 4.2.1编译时收到的重复符号错误的来源.

具体错误是

ld: duplicate symbol _SOCIODEM_FILENAMES in /var/folders/c+/c+eq1Qz1Feye7vxs5mQOUE+++TI/-Tmp-//ccP3yVgF.o and /var/folders/c+/c+eq1Qz1Feye7vxs5mQOUE+++TI/-Tmp-//cc1NqtRL.o 
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

只有在我将此声明包含在名为的文件中时才会发生错误Parameters.h:

// Parameters.h

#ifndef PARAMETERS_H
#define PARAMETERS_H

// ...[code snipped]...
const int NUM_SOCIODEM_FILES = 5;
const char * SOCIODEM_FILENAMES[ NUM_SOCIODEM_FILES ] = { "LSPAN_PDF.txt", 
     "FLEDGE_PDF.txt", 
     "PAIR_PDF.txt", 
     "BIRTH_AGE_PDF.txt",  
     "SPLIT_PDF.txt"  };
// ...[code snipped]...
#endif
Run Code Online (Sandbox Code Playgroud)

我搜索了所有文件,这是唯一SOCIODEM_FILENAMES宣布的地方.当我注释掉声明时,"重复符号"错误消失了.

我不熟悉链接器错误(如果这就是这个),并希望帮助解决问题.我的所有头文件都有#ifndef...#define...#endif包装器.我的编译命令是

g++ -o a.out -I /Applications/boost_1_42_0/ Host.cpp Simulation.cpp main.cpp Rdraws.cpp
Run Code Online (Sandbox Code Playgroud)

提前致谢.


解决方案摘要

我现在在Parameters.h中:

const char * const SOCIODEM_FILENAMES[ NUM_SOCIODEM_FILES ] = { …
Run Code Online (Sandbox Code Playgroud)

c++ linker

7
推荐指数
2
解决办法
4026
查看次数

"无法打开连接" - 带雪的HP中的HPC

我正在尝试使用雪在R中运行并行作业.我已经能够在旧版本的R和雪上运行非常相似的工作.R包依赖性阻止我恢复.

会发生什么:我的工作在这一parRapply步骤终止,即第一次节点必须做任何报告之外的事情Sys.info().错误消息显示:

Error in checkForRemoteErrors(val) : 
3 nodes produced errors; first error: cannot open the connection 
Calls: parRapply ... clusterApply -> staticClusterApply -> checkForRemoteErrors
Run Code Online (Sandbox Code Playgroud)

规格: R 2.14.0,雪0.3-8,RedHat Enterprise Linux客户端版本5.6.雪包已经建立在正确版本的R上.

详细信息: 以下代码似乎执行正常:

cl <- makeCluster(3)
clusterEvalQ(cl,library(deSolve,lib="~/R/library"))
clusterCall(cl,function() Sys.info()[c("nodename","machine")])
Run Code Online (Sandbox Code Playgroud)

我是最终用户,而不是系统管理员,但我迫切需要建议并深入了解可能出现的问题.

hpc r snow

7
推荐指数
1
解决办法
6607
查看次数

Boost MultiIndex中的复合键语法

即使在研究了这些例子之后,我也无法弄清楚如何使用MultiIndex容器上的复合键来提取范围.

typedef multi_index_container<
  boost::shared_ptr< Host >,
  indexed_by< 
    hashed_unique< const_mem_fun<Host,int,&Host::getID> >, // ID index
    ordered_non_unique< const_mem_fun<Host,int,&Host::getAgeInY> >, // Age index
    ordered_non_unique< const_mem_fun<Host,int,&Host::getHousehold> >, // Household index
    ordered_non_unique< // Age & eligibility status index
      composite_key<
         Host,
        const_mem_fun<Host,int,&Host::getAgeInY>,
        const_mem_fun<Host,bool,&Host::isPaired>
        >
       >
    > // end indexed_by
  > HostContainer;
Run Code Online (Sandbox Code Playgroud)

我的目标是让一个迭代器指向HostContainer hmap具有age 的元素子集中的第一个partnerAge并返回falseHost::isPaired():

  std::pair< hmap::iterator,hmap::iterator > pit = hmap.equal_range(boost::make_tuple( partnerAge, false ) );
Run Code Online (Sandbox Code Playgroud)

我认为这是非常错误的.

  1. 如何/在何处指定迭代器索引(年龄和资格应为3)?我将来会包含其他复合键.
  2. 这两个迭代器究竟是什么std::pair?(我正在从一个我不理解的例子中复制语法.)
  3. 我会用理想std::count来计算的时代元素的数量partnerAge有资格(返回falseHost::isPaired() …

c++ boost

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

使用.C()从R调用已编译的C

我试图从R 调用一个程序(getNBDensitiesC可执行文件中measurementDensities_out的函数).该函数传递了几个数组和变量double runsum.现在,该getNBDensities函数基本上什么都不做:它打印以筛选传递参数的值.我的问题是调用函数的语法:

array(.C("getNBDensities",
            hr = as.double(hosp.rate), # a vector (s x 1)
            sp = as.double(samplingProbabilities), # another vector (s x 1)
            odh = as.double(odh), # another vector (s x 1)
            simCases = as.integer(x[c("xC1","xC2","xC3")]), # another vector (s x 1)
            obsCases = as.integer(y[c("yC1","yC2","yC3")]), # another vector (s x 1)
            runsum = as.double(runsum), # double
            DUP = TRUE, NAOK = TRUE, PACKAGE = "measurementDensities_out")$f,
            dim = length(y[c("yC1","yC2","yC3")]),
            dimnames = c("yC1","yC2","yC3"))

正确执行该功能后(即右侧输出打印到屏幕),我得到的错误是

Error in …
Run Code Online (Sandbox Code Playgroud)

c r

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

二项分布的随机数

我需要从二项式分布中快速生成大量随机数,以获得截然不同的试验大小(但大多数都会很小).我希望不必手动编写算法(例如,参见11月的相关讨论),因为我是一名新手程序员并且不喜欢重新发明轮子.看来Boost不为二元分布的变量提供发电机,但TR1GSL可以.是否有充分的理由选择其中一个,或者我更好地根据自己的情况编写一些东西?我不知道这是否有意义,但我将在整个程序中从均匀分布和二项分布生成数字之间交替,我希望它们共享相同的种子并最小化开销.对于我应该考虑的内容,我会喜欢一些建议或例子.

c++ random tr1 gsl

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

R中负二项密度(dnbinom)的参数化

我希望这属于这里,而不是数学论坛.

我试图在R中计算负二项式的密度.我的参数目前是mu(预期的平均失败次数)和过度离散参数的形式k.因为我正在调用已dnbinom编译的C代码,所以我需要将这些参数转换为默认参数化dnbinom,这需要每次试验成功的概率pn计数停止前的成功次数.我用下面的公式来求解p,并n在以下方面muk:

n = mu*p/(1-p)
mu + mu^2/k = n(1-p)/p^2
Run Code Online (Sandbox Code Playgroud)

经过一些代数,我得到了

p = k/mu + 1
n = -(mu^2+k*mu)/k
Run Code Online (Sandbox Code Playgroud)

使用dnbinomR中的不同参数化检查这些方程式会发现一个问题:

> k = 1.2
> mu = 15
> p = k/mu+1
> n = -(mu*k+mu^2)/k
> dnbinom(10,size=n,prob=p)
[1] NaN
Warning message:
In dnbinom(x, size, prob, log) : NaNs produced
> dnbinom(10,mu=mu,size=k)
[1] 0.03560668

我错过了R的参数化怎么样?我现在很确定我的代数是正确的.或者,有没有办法在从C 调用时坚持原始参数化(就mu和而言k)dnbinom

c statistics r

3
推荐指数
1
解决办法
2397
查看次数

用于生成并行C++作业输入的BASH脚本

我是一个业余的C++程序员,试图了解基本的shell脚本.我有一个复杂的C++程序,当前从中读取不同的参数值Parameters.h,然后按顺序执行每个参数值的一个或多个模拟.这些模拟需要很长时间才能运行.由于我有一个可用的集群,我想有效地并行化这个作业,在一个单独的处理器上运行每个参数值的模拟.我假设为了这个目的,比OpenMPI更容易学习shell脚本技术.我的集群在LSF平台上运行.

如何在Bash中编写输入参数,以便它们分布在多个处理器中,每个处理器都使用该值执行程序?我想避免互动提交.理想情况下,我在Bash读取的文本文件中有输入,并且我将两个参数传递给每个作业:实际参数值和参数ID.

提前感谢任何线索和建议.


我的解决方案

GNU Parallel确实看起来很漂亮,但我最终(在IT管理员的帮助下)编写了一个简单的bash脚本来回显屏幕三个输入(治疗标识符,治疗/参数值和模拟标识符):

#!/bin/bash 
j=1
for treatment in cat treatments.txt; do
  for experiment in cat simulations.txt; do
   bsub -oo tr_${j}_sim_${experiment}_screen -eo tr_${j}_sim_${experiment}_err -q short_serial "echo \"$j $treatment $experiment\" | ./a.out"
  done
  let j=$j+1 
done

该文件treatments.txt包含我想要改变的值simulations.txt的列表,包含我想要运行的所有模拟标识符的列表(当前只有1,...,s,其中s是我想要的模拟总数每个治疗),以及处理被索引1 ... j.

c++ bash shell scripting

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

在LSF作业数组中引用作业索引

我正在尝试将作业数组中的作业索引作为参数传递给另一个bash脚本.

numSims=3 
numTreatments=6 # uses numTreatments top rows of parameters.csv
maxFail=10
j=1
while [ $j -le $numSims ];
do
    bsub -q someQueue -J "mySim[1-$numTreatments]%2" ./another_script.sh $LSB_JOBINDEX $j $maxFail
    let j=j+1
done

这里的最终想法是为1,... numTreatments,numSims作业(模拟)中的每一个提交.我想一次运行两个工作(%2).输出的格式为XX_indexNumber_simNumber,其中indexNumber从1开始运行,...,numTreatments以及从1开始的simNumber,...,numSims.

理想情况下,作为此脚本的一部分提交的所有内容都具有相同的作业ID.这尚未正确设置,因为具有相同作业的所有作业j都被分配了不同的作业ID.我的直接问题是another_script.sh没有识别$LSB_JOBINDEX为输入 - 它看到$j并且$maxFail作为第一个也是唯一两个传递的参数.当我用一些其他变量代替时$LSB_JOBINDEX,没有问题.我究竟做错了什么?


编辑 -有些事情我已经试过:"$LSB_JOBINDEX",${LSB_JOBINDEX},%I,和I=$LSB_JOBINDEX; bsub ... $I $j $maxFail

bash jobs hpc lsf

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

访问boost :: unordered_multimap或struct时不常出现分段错误

我在调试分段错误时遇到问题.我很欣赏如何缩小问题范围的提示.

迭代器尝试访问结构的元素时出现错误Infection,定义如下:

struct Infection {
public:
  explicit Infection( double it, double rt ) : infT( it ), recT( rt ) {}
  double infT; // infection start time
  double recT; // scheduled recovery time
};
Run Code Online (Sandbox Code Playgroud)

这些结构保存在一个特殊的结构中,InfectionMap:

typedef boost::unordered_multimap< int, Infection > InfectionMap;
Run Code Online (Sandbox Code Playgroud)

班上的每个成员Host都有InfectionMap carriage.恢复时间和关联的主机标识符保存在优先级队列中.当s在特定主机中的特定应变的模拟中出现预定的恢复事件时,程序搜索carriage该主机以找到与恢复时间()匹配的Infection那些.(对于那些不值得进入的原因,它不是作为权宜之计,我使用为重点,以;应变更为有用的,一脉相承合并感染是可能的.)recTdouble recoverTimerecTInfectionMaps

assert( carriage.size() > 0 );
pair<InfectionMap::iterator,InfectionMap::iterator> ret = carriage.equal_range( s );
InfectionMap::iterator it;
for ( it = …
Run Code Online (Sandbox Code Playgroud)

c++ struct segmentation-fault

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

C++编译器错误:找不到从_main引用的成员函数的ld:符号

我对编译器错误很困惑.我的代码在4-5小时前完成了工作; 沿途唯一可行的检查点没有产生任何线索(即,我无法让错误在一个中间步骤消失).我没有看到编译器错误如何与我所做的任何更改有关.

用.编译 g++ -O3 -o a.out -I /Applications/boost_1_42_0/ Host.cpp Simulation.cpp main.cpp Rdraws.cpp SimPars.cpp

出现以下错误

Undefined symbols:
  "Simulation::runTestEpidSim()", referenced from:
      _main in ccmcSY5M.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我在中创建和操作Simulation对象main.我对代码的唯一更改是(1)创建一个新的成员函数,Simulation::runTestEpidSim()它被调用main,以及(2)编写一些新的全局输入/输出处理函数,我已经将其解包并直接插入到main顺序中调试正在发生的事情.

我没有更改任何cpp文件,包括头文件,库或编译器命令.

我不是一个专业的程序员.专业人士将如何调试此类问题?

不确定如何最好地剪切和粘贴我的代码,但这里是摘录 -

class Simulation
{
 public:
  Simulation( int trt, int sid, SimPars * spPtr  );
  ~Simulation();

  // MEMBER FUNCTION PROTOTYPES
  void runDemSim( void );
  void runEpidSim( void );
  double runTestEpidSim( void );
 ... 
 } …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-construction

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

标签 统计

c++ ×8

boost ×3

r ×3

bash ×2

c ×2

hpc ×2

compiler-construction ×1

d3.js ×1

gsl ×1

hash ×1

javascript ×1

jobs ×1

linker ×1

lsf ×1

random ×1

scripting ×1

segmentation-fault ×1

shell ×1

snow ×1

statistics ×1

struct ×1

svg ×1

tr1 ×1