小编Sev*_*eux的帖子

保存/加载 data.table 的最快方法

我想做的实际上是使用最快的可用方法来存储data.tables 以便进一步处理。

大致如下:

  1. 从 CSV/RDS 读取原始数据。
  2. 将其转换为data.table.
  3. 将其保存为针对重新读取而优化的格式(RDS 似乎不适用于data.table,是这样吗?还有其他二进制选项吗?)
  4. 继续处理步骤 #3 中的文件,一遍data.table又一遍地直接读取它,进行切片、分组、绘图……

步骤#3 的最佳选择是什么?

r data.table

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

什么是"模板<class T>使用owner = T;"?

以下摘自gsl.hMicrosoft的gsl库(https://github.com/microsoft/gsl):

namespace gsl
{
    //
    // GSL.owner: ownership pointers 
    //
    using std::unique_ptr;
    using std::shared_ptr;

    template<class T>
    using owner = T;
    ...
};
Run Code Online (Sandbox Code Playgroud)

我无法理解以下别名模板的含义:

template<class T>
using owner = T;
Run Code Online (Sandbox Code Playgroud)

有什么解释吗?

c++ alias templates c++11 ms-gsl

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

python 中 beta 二项式分布的高效采样

对于随机模拟,我需要绘制大量贝塔二项式分布的随机数。

目前我是这样实现的(使用python):

import scipy as scp
from scipy.stats import rv_discrete

class beta_binomial(rv_discrete):
       """
       creating betabinomial distribution by defining its pmf
       """
       def _pmf(self, k, a, b, n):
          return scp.special.binom(n,k)*scp.special.beta(k+a,n-k+b)/scp.special.beta(a,b)
Run Code Online (Sandbox Code Playgroud)

因此可以通过以下方式对随机数 x 进行采样:

betabinomial = beta_binomial(name="betabinomial")
x = betabinomial.rvs(0.5,0.5,3) # with some parameter 
Run Code Online (Sandbox Code Playgroud)

问题是,对一个随机数进行采样大约需要 10 分钟。0.5ms,在我的例子中,它主导了整个模拟速度。限制因素是 beta 函数(或其中的 gamma 函数)的评估。

有谁知道如何加快采样速度?

python random distribution stochastic beta-distribution

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

Conda 安装需要永远(作为 SAT 求解器卡住)

如何解决 conda 安装程序的问题,它需要永远解决巨大的 SAT 问题(为什么我们需要解决它们?):

DEBUG conda.common.logic:_run_sat(734): Invoking SAT with clause count: 9661561
DEBUG conda.common.logic:_run_sat(734): Invoking SAT with clause count: 5164645
DEBUG conda.common.logic:_run_sat(734): Invoking SAT with clause count: 2751948
DEBUG conda.common.logic:_run_sat(734): Invoking SAT with clause count: 1518175
DEBUG conda.common.logic:_run_sat(734): Invoking SAT with clause count: 964848
DEBUG conda.common.logic:_run_sat(734): Invoking SAT with clause count: 1249154
DEBUG conda.common.logic:_run_sat(734): Invoking SAT with clause count: 1105581
Run Code Online (Sandbox Code Playgroud)

等了半个多小时,我还能做些什么而不是重新安装它?

python miniconda

5
推荐指数
3
解决办法
5917
查看次数

威布尔分布的更新函数

Weibull 分布的更新函数m(t)如下t = 10所示。在此输入图像描述

我想找到 的值m(t)。我写了下面的r代码来计算m(t)

last_term = NULL
gamma_k = NULL
n = 50
for(k in 1:n){
  gamma_k[k] = gamma(2*k + 1)/factorial(k)
}

for(j in 1: (n-1)){
  prev = gamma_k[n-j]
  last_term[j] = gamma(2*j + 1)/factorial(j)*prev
}

final_term = NULL
find_value = function(n){
  for(i in 2:n){
  final_term[i] = gamma_k[i] - sum(last_term[1:(i-1)])
  }
  return(final_term)
}
all_k = find_value(n)

af_sum = NULL
m_t = function(t){
for(k in 1:n){
af_sum[k] = (-1)^(k-1) * all_k[k] …
Run Code Online (Sandbox Code Playgroud)

statistics r distribution gamma-function weibull

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

glm :: lookAt返回带有nan元素的矩阵

我想为垂直地看着地面的相机创建一个视图矩阵:

glm::mat4 matrix = glm::lookAt(glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
Run Code Online (Sandbox Code Playgroud)

最后一个参数是全局向上向量,所以一切似乎都是正确的,但我得到了跟随matirx:

-nan    -nan    -0  0   
-nan    -nan     1  0   
-nan    -nan    -0  0   
 nan     nan    -1  1
Run Code Online (Sandbox Code Playgroud)

我想我得到了nan,因为看向量与向量平行,但是如何使用glm :: lookAt函数构建正确的视图矩阵.

opengl 3d glm-math

4
推荐指数
2
解决办法
1549
查看次数

如何在OpenCascade中获取实际的地形数据?

所有

具有来自CAD(SW)的STEP格式文件,并能够通过Python OCC绑定读取文件:

    importer = aocxchange.step.StepImporter(fname)
    shapes = importer.shapes

    shape = shapes[0]

    # promote up
    if (shape.ShapeType() == OCC.TopAbs.TopAbs_SOLID):
        sol =  OCC.TopoDS.topods.Solid(shape)
Run Code Online (Sandbox Code Playgroud)

我可以显示它,戳它,检查标志等

t = OCC.BRepCheck.BRepCheck_Analyzer(sol)
print(t.IsValid())
print(sol.Checked())
print(sol.Closed())
print(sol.Convex())
print(sol.Free())
print(sol.Infinite())
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

到目前为止,一切都很好。它确实看起来像是沿着某些复杂路径弯曲的小管。

问题:如何从已有的几何特征中提取几何特征?我真的需要电子管参数及其遵循的路径。用Python和/或C ++编写的任何好的示例都很好

c++ python computational-geometry opencascade

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

您如何将Gamma分布拟合到R中的数据?

假设我有使用以下方法生成的变量x:

x <- rgamma(100,2,11) + rnorm(100,0,.01) #gamma distr + some gaussian noise

    head(x,20)
 [1] 0.35135058 0.12784251 0.23770365 0.13095612 0.18796901 0.18251968
 [7] 0.20506117 0.25298286 0.11888596 0.07953969 0.09763770 0.28698417
[13] 0.07647302 0.17489578 0.02594517 0.14016041 0.04102864 0.13677059
[19] 0.18963015 0.23626828
Run Code Online (Sandbox Code Playgroud)

我怎样才能适应伽玛分布?

r distribution gamma-distribution

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

为什么带有自定义删除器的unique_ptr对于nullptr不起作用,而shared_ptr呢?

使用简单代码unique_ptrshared_ptr作为范围保护的简单代码.有关清除内容的所有信息都会被捕获deleter,因此我虽然可以安全地nullptr用于构造函数.

显然,使用Visual C++ 2017(14.1),它没有按预期工作unique_ptr,但适用于shared_ptr.它是一个微软怪癖,还是标准防止调用deleterunique_ptr控股时候nullptr

在下面的代码中,我被迫构建一个unique_ptrwith (void*)1.如果我用它构造它nullptr,cleaner将不会被调用.因为shared_ptr,没有区别,cleaner总是被称为.

#include <memory>
#include <iostream>

int main()
{
    int ttt = 77;

    auto cleaner = [&ttt](void*) {
        std::cout << "cleaner: " << ttt << "\n"; // do something with capture here instead of print
    };

    std::unique_ptr<void, decltype(cleaner)> p((void*)1, cleaner);

    std::shared_ptr<void> q(nullptr, [&ttt](void*) {
        std::cout << "shared: …
Run Code Online (Sandbox Code Playgroud)

c++ visual-c++ language-lawyer c++11

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

生成“甜甜圈”形状的线性分布

我正在尝试为圆内的点生成分布,其中有更多的点朝向中心,但对于甜甜圈形状

我可以生成一个均匀分布的甜甜圈形状 (1),或者一个有更多点朝向中心 (2) 的圆,但不能生成一个有很多点朝向其内部边界的甜甜圈形状。

(1)

r = sqrt(runif(250, min = 0.25, max =1))
p = runif(250)
theta = p *2*pi
a = r * cos(theta) #coordinates for circle
b = r * sin(theta)
plot(a,b)
Run Code Online (Sandbox Code Playgroud)

(2)

r = runif(250)
p = runif(250)
theta = p *2*pi
a = r * cos(theta)
b = r * sin(theta)
plot(a,b)

Run Code Online (Sandbox Code Playgroud)

我最接近的尝试是修改程序 (2),其中 r 限制在 0.5 和 1 之间,但这会删除大多数最接近中心的点,并且其内部周围不会有那么多点。

random statistics r probability

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