小编L.G*_*ger的帖子

erlang:send_after/3和timer:send_after/3是否有不同的行为?

我想在延迟之后向进程发送消息并发现erlang:send_after/4.

在查看文档时,它看起来就像我想要的那样:

erlang:send_after(Time, Dest, Msg, Options) -> TimerRef

启动计时器.当计时器到期时,消息Msg被发送到由Dest标识的进程.

但是,当目标在另一个节点上运行时它似乎不起作用 - 它告诉我其中一个参数是坏的.

1> P = spawn('node@host', module, function, [Arg]).
<10585.83.0>
2> erlang:send_after(1000, P, {123}).
** exception error: bad argument
     in function  erlang:send_after/3
        called as erlang:send_after(1000,<10585.83.0>,{123})
Run Code Online (Sandbox Code Playgroud)

做同样的事timer:send_after/3似乎工作正常:

1> P = spawn('node@host', module, function, [Arg]).
<10101.10.0>
2> timer:send_after(1000, P, {123}).
{ok,{-576458842589535,#Ref<0.1843049418.1937244161.31646>}}
Run Code Online (Sandbox Code Playgroud)

而且,文档timer:send_after/3状态几乎是同样的事情erlang版本:

send_after(Time, Pid, Message) -> {ok, TRef} | {error, Reason}

评估Pid!时间毫秒后的消息.

所以问题是,为什么这两个函数在表面上做同样的事情时表现不同?被erlang:send_after打破,或错误广告?或者可能timer:send_after没有做我认为的事情?

erlang erlang-otp

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

使用 ModelingToolkit.jl 消除守恒量

ModelingToolkit.jl这是一个非常棒的软件包,以至于我经常对它抱有过高的期望。例如,我经常发现自己的模型可归结为以下内容:

@variables t x(t) y(t)
@parameters a b C
d = Differential(t)
eqs = [
    d(x) ~ a * y - b * x,
    d(y) ~ b * x - a * y,
    0 ~ x + y - C
]

@named sys = ODESystem(eqs)
Run Code Online (Sandbox Code Playgroud)

现在,知道我可以通过替换 来将其简化为一个方程0 ~ x + y - C。但实际上,我的系统要大得多、不那么琐碎并且是通过编程生成的,所以我想ModelingToolkit.jl为我自己做这件事。

我尝试过使用structural_simplify,但额外的方程会妨碍:

julia> structural_simplify(sys)
ERROR: ExtraEquationsSystemException: The system is unbalanced. There are 2 highest order derivative variables and …
Run Code Online (Sandbox Code Playgroud)

modeling julia

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

为什么 numpy.random.choice 不使用算术编码?

如果我评估如下:

numpy.random.choice(2, size=100000, p=[0.01, 0.99])

使用一个均匀分布的随机数float,例如r,并决定是否r < 0.01会浪费许多生成的随机位(熵)。我听说(二手)生成伪随机数的计算成本很高,所以我认为numpy不会这样做,而是会在这种情况下使用算术编码之类的方案。

然而,乍一看似乎确实为它所要求的每个样本choice生成了一个。float此外,快速timeit实验表明,生成均匀浮点数实际上比 中的样本n更快。np=[0.01, 0.99]

>>> timeit.timeit(lambda : numpy.random.choice(2, size=100000, p=[0.01, 0.99]), number=1000)
1.74494537999999
>>> timeit.timeit(lambda : numpy.random.random(size=100000), number=1000)
0.8165735180009506
Run Code Online (Sandbox Code Playgroud)

真的会像看起来那样为每个样本choice生成一个吗?在某些情况下(特别是当数据很大且分布不均匀时),float使用某种压缩算法不会显着提高性能吗?如果没有,为什么不呢?sizep

python random performance numpy python-3.x

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

标签 统计

erlang ×1

erlang-otp ×1

julia ×1

modeling ×1

numpy ×1

performance ×1

python ×1

python-3.x ×1

random ×1