小编Tay*_*lor的帖子

R函数没有返回值

我用他的一些代码帮助了我的一个朋友.我不知道如何解释这种奇怪的行为,但我可以告诉他,他的功能并没有明确地返回任何东西.这是一个可重复的最小例子:

derp <- function(arg){
  arg <- arg+3
}

data <- derp(500)
data
#[1] 503
derp(500)
#nothing outputs
class(derp(500))
#[1] "numeric"
Run Code Online (Sandbox Code Playgroud)

有这个名字我可以google吗?为什么会这样?为什么在调用derp()之后arg没有被销毁?

r function

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

libc++abi.dylib:因 std::__1::system_error 类型的未捕获异常而终止:互斥锁失败:参数无效

我有一些线程池的代码,它已经在我的 Ubuntu 机器上运行了相当长一段时间了。该项目是一个 CMake 项目,我相信它使用最新版本的 g++ 作为编译器。

我只是尝试在 Mac 上运行代码,CMake 尝试使用 AppleClang 12.0.0.12000032,我遇到了

libc++abi.dylib: terminating with uncaught exception of type std::__1::system_error: mutex lock failed: Invalid argument
Run Code Online (Sandbox Code Playgroud)

AppleClang 丢失了std::shared_mutexstd::mutex?这些是 c++17 功能。我需要做些什么才能在这台 Mac 上启用 c++17 吗?我确实提到我的文件中需要它CMakeLists.txt

这是完整的构建输出:

(base) clare.obrien.brown@Clares-Air build % cmake ..
-- The C compiler identification is AppleClang 12.0.0.12000032
-- The CXX compiler identification is AppleClang 12.0.0.12000032
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for …
Run Code Online (Sandbox Code Playgroud)

c++ cmake c++17

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

numpy positive半明确警告

在我正在编写的Python脚本中,我正在使用表达式模拟多元正态随机向量

np.random.multivariate_normal(np.zeros(dim_obs), y_cov)
Run Code Online (Sandbox Code Playgroud)

我的脚本运行,但会生成以下警告:

RuntimeWarning: covariance is not positive-semidefinite.
Run Code Online (Sandbox Code Playgroud)

我投入的小调试打印语句False大部分都是打印出来的

print( np.all(np.linalg.eigvals(y_cov) > 0) )
Run Code Online (Sandbox Code Playgroud)

为什么这会引发误报?我y_cov是正半正定因为它是(抱歉缺少TeX标记)B x x'B'+ yy'其中B是矩阵,其他是随机向量,每个元素为正.

在这个特定的运行中,B实际上只是一个大小为9的向量.我可以忽略这个警告吗?从文档:

注意,协方差矩阵必须是正半定的(也就是非负定的).否则,此方法的行为未定义,并且无法保证向后兼容性.

编辑:这是一个完全可以运行的东西.感谢您提示@ user2357112.

import numpy as np
num_factors = 1
dim_obs = 9
u = np.random.normal(size = num_factors)
v = np.random.normal(size = dim_obs)
y_cov = np.dot(np.ones((9,1)), np.exp(u.reshape((num_factors,1))/2))
y_cov = np.dot(y_cov, np.exp(u.reshape((1,num_factors))/2)) #transpose
y_cov = np.dot(y_cov, np.transpose(np.ones((9,1))))
y_cov += np.dot(np.exp( v.reshape((dim_obs,1)) / 2), 
                np.exp( v.reshape((1,dim_obs)) / 2))
print( np.random.multivariate_normal(np.zeros(dim_obs), y_cov) )
print( np.all(np.linalg.eigvals(y_cov) > 0) …
Run Code Online (Sandbox Code Playgroud)

python simulation numpy

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

在 C++ 中计算 log-sum-exp 函数

c++ 标准库中是否有任何函数可以计算指数总和的对数?如果没有,我应该如何编写自己的?你有没有在这篇 wiki 文章中提到的任何建议?

我特别关心被加数会下溢的可能性。在这种情况下,您对绝对值很大的负数求幂。我正在使用 C++11。

c++ underflow exp c++11

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

正确注册插件以通过 Rcpp 使用 Eigen

我试图能够c++R. 这是我第一次尝试一个可重复的小例子。

library(inline)
library(Rcpp)
inc <- 
"#include <Eigen/Dense>

template <size_t dim>
class SillyWrapper  
{
public:
  Eigen::Matrix<double,dim,1> m_vec;
  SillyWrapper(const Eigen::Matrix<int,dim,1>& vec) : m_vec(vec);
};"
src <- 
'SillyWrapper mything(Rcpp::as<Eigen::Map<Eigen::Matrix<double,dim,1>>>(x));'

library(inline)
fun <- cxxfunction(signature(x="numeric"),
                   body=src, 
                   includes=inc, 
                   plugin="Rcpp")
fun(rnorm(3))
Run Code Online (Sandbox Code Playgroud)

但是,如何访问 Eigen 标头呢?

在我的机器上,它们位于/usr/include/eigen3/. 我想我需要“注册一个插件”。我不确定这个文件路径在哪里。我尝试了一些命名参数,但没有成功。这是我尝试过但不起作用的一个示例:

library(inline)
library(Rcpp)
inc <- 
'template <size_t dim>
class SillyWrapper  
{
public:
  Eigen::Matrix<double,dim,1> m_vec;
  SillyWrapper(const Eigen::Matrix<int,dim,1>& vec) : m_vec(vec);
};'
src <- 
    'SillyWrapper mything(Rcpp::as<Eigen::Map<Eigen::Matrix<double,dim,1>>>(x));'
plug <- Rcpp.plugin.maker(include.before = "#include <Eigen/Dense>", 
                          LinkingTo = "-I/usr/include/eigen3/") # correct …
Run Code Online (Sandbox Code Playgroud)

c++ r rcpp c++11 eigen3

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

rcpp 函数未在 r 包中导出

当我尝试从 R 包中加载一些 C++ 函数时,在尝试导出一些 C++ 函数时遇到了一些麻烦。运行devtools::check()收益率

> checking R code for possible problems ... NOTE
  postRiverComp: no visible binding for global variable
    ‘_thmc_postRiverComp’
  preFlopComp: no visible binding for global variable ‘_thmc_preFlopComp’
  preRiverComp: no visible binding for global variable
    ‘_thmc_preRiverComp’
  preTurnComp: no visible binding for global variable ‘_thmc_preTurnComp’
  rcpp_hello_world: no visible binding for global variable
    ‘_thmc_rcpp_hello_world’
  Undefined global functions or variables:
    _thmc_postRiverComp _thmc_preFlopComp _thmc_preRiverComp
    _thmc_preTurnComp _thmc_rcpp_hello_world
Run Code Online (Sandbox Code Playgroud)

我认为我在编写 Roxygen 注释方面做得很好,所以我一定是在使用它们的地方使用了错误的函数。需要明确的是,我可以library(thmc)并且不会抛出任何错误,但不会导出任何函数。我可以看到这一点,因为当我输入search()它时会产生

 [1] ".GlobalEnv"        "package:thmc"      "devtools_shims"    "tools:rstudio" …
Run Code Online (Sandbox Code Playgroud)

export r package rcpp

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

将特征数组转换为特征向量

这有什么问题吗?Eigen 的文档说它的向量只是一个维度设置为 1 的矩阵。但我更喜欢一种.vector()方法。

Eigen::VectorXd tmpVec(5);
tmpVec << 1,2,3,4,5;
Eigen::VectorXd result = tmpVec.array().matrix();
std::cout << result << "\n";
Run Code Online (Sandbox Code Playgroud)

c++ eigen c++11

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

替代Eigen :: MatrixXd typedef

用具有元素的向量和矩阵替换所有Eigen::MatrixXds和Eigen::VectorXds 的最简单方法是什么long double

我的代码中的每个基本浮点变量都是类型long double。另外,每次我使用矩阵或向量时,都会使用以下typedef。

typedef Eigen::VectorXd Vec;
typedef Eigen::MatrixXd Mat;
Run Code Online (Sandbox Code Playgroud)

将这些typedef切换到什么是最好的?如果我将它们保留原样会怎样?

c++ typedef long-double eigen

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

何时捕获捕获变量?

我正在进行std::vector回调std::function,而我在理解捕获时遇到了一些麻烦.当我尝试使用它们时,它们似乎超出了范围,如果我通过引用捕获它们.如果我按价值捕获,一切正常.

使用这些回调函数的代码需要一定的签名,所以假设我无法修改使用它们的代码,我需要坚持使用捕获变量而不是将事物作为函数参数传递.

localVar捕获?是在定义lambda还是调用lambda时?答案是否会根据我是按值还是参考来捕获?

这是我想要了解的一个小例子:

#include <iostream>
#include <functional>
#include <vector>

int main(int argc, char **argv)
{

    int n(5);

    // make a vector of lambda functions
    std::vector<std::function<const int(void)> > fs;
    for(size_t i = 0; i < n; ++i){
        int localVar = i;
        auto my_lambda = [&localVar]()->int // change &localVar to localVar and it works
        {
            return localVar+100;
        };
        fs.push_back(my_lambda);
    }

    // use the vector of lambda functions
    for(size_t i = 0; i < n; …
Run Code Online (Sandbox Code Playgroud)

c++ lambda c++11 std-function

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

在抽象基类中使用c ++ 11的std :: async

为什么不在这个抽象基类中创建这样的线程呢?我试图抽象出从这个基类派生的用户的所有多线程细节.当我清楚地写出callbackSquare返回类型时,我不明白它为什么说"没有类型命名为'type'" int.

#include <iostream>
#include <future>
#include <vector>

class ABC{
public:
    std::vector<std::future<int> > m_results;
    ABC(){};
    ~ABC(){};
    virtual int callbackSquare(int& a) = 0;
    void doStuffWithCallBack();
};

void ABC::doStuffWithCallBack(){
    for(int i = 0; i < 10; ++i)
        m_results.push_back(std::async(&ABC::callbackSquare, this, i));

    for(int j = 0; j < 10; ++j)
        std::cout << m_results[j].get() << "\n";
}

class Derived : public ABC {
    Derived() : ABC() {};
    ~Derived(){};
    int callbackSquare(int& a) {return a * a;};
};

int main(int argc, char **argv)
{ …
Run Code Online (Sandbox Code Playgroud)

multithreading c++11 stdasync stdthread std-future

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