我用他的一些代码帮助了我的一个朋友.我不知道如何解释这种奇怪的行为,但我可以告诉他,他的功能并没有明确地返回任何东西.这是一个可重复的最小例子:
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没有被销毁?
我有一些线程池的代码,它已经在我的 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_mutex吗std::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) 在我正在编写的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) c++ 标准库中是否有任何函数可以计算指数总和的对数?如果没有,我应该如何编写自己的?你有没有在这篇 wiki 文章中提到的任何建议?
我特别关心被加数会下溢的可能性。在这种情况下,您对绝对值很大的负数求幂。我正在使用 C++11。
我试图能够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)
在我的机器上,它们位于/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) 当我尝试从 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) 这有什么问题吗?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) 用具有元素的向量和矩阵替换所有Eigen::MatrixXds和Eigen::VectorXds 的最简单方法是什么long double?
我的代码中的每个基本浮点变量都是类型long double。另外,每次我使用矩阵或向量时,都会使用以下typedef。
typedef Eigen::VectorXd Vec;
typedef Eigen::MatrixXd Mat;
Run Code Online (Sandbox Code Playgroud)
将这些typedef切换到什么是最好的?如果我将它们保留原样会怎样?
我正在进行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) 为什么不在这个抽象基类中创建这样的线程呢?我试图抽象出从这个基类派生的用户的所有多线程细节.当我清楚地写出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)