小编mkl*_*kln的帖子

使用pandas中的多个值从列创建虚拟对象

我正在寻找一种pythonic方式来处理以下问题.

The pandas.get_dummies() method is great to create dummies from a categorical column of a dataframe. For example, if the column has values in ['A', 'B'], get_dummies() creates 2 dummy variables and assigns 0 or 1 accordingly.

Now, I need to handle this situation. A single column, let's call it 'label', has values like ['A', 'B', 'C', 'D', 'A*C', 'C*D'] . get_dummies() creates 6 dummies, but I only want 4 of them, so that a row could have multiple …

python dummy-data pandas categorical-data

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

大熊猫的.groupby对面是否有"取消组合"操作?

假设我们从这个简单的表开始,存储在pandas数据帧中:

    name  age  family
0   john    1       1
1  jason   36       1
2   jane   32       1
3   jack   26       2
4  james   30       2
Run Code Online (Sandbox Code Playgroud)

然后我做

group_df = df.groupby('family')
group_df = group_df.aggregate({'name': name_join, 'age': pd.np.mean})
Run Code Online (Sandbox Code Playgroud)

其中groupby()是名称的简单聚合函数:

def name_join(list_names, concat='-'):
    return concat.join(list_names)
Run Code Online (Sandbox Code Playgroud)

输出是:

        age             name
family                      
1        23  john-jason-jane
2        28       jack-james
Run Code Online (Sandbox Code Playgroud)

现在的问题.

是否有快速,有效的方法从聚合表中获取以下内容?

    name  age  family
0   john   23       1
1  jason   23       1
2   jane   23       1
3   jack   28       2
4  james   28       2
Run Code Online (Sandbox Code Playgroud)

(注意:数字只是示例,我不关心在此具体示例中取平均值后丢失的信息)

我认为我能做到的方式看起来效率不高:

  1. 创建空数据帧 …

python group-by pandas pandas-groupby

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

Rcpp的mvtnorm :: pmvnorm实现比原始R函数慢

我正在尝试获得pmvnorm的Rcpp版本以至少与R中的mvtnorm :: pmvnorm一样快地工作。

我已经找到https://github.com/zhanxw/libMvtnorm并使用相关的源文件创建了一个Rcpp框架包。我添加了以下使用Armadillo的函数(因为我正在我编写的其他代码中使用它)。

//[[Rcpp::export]]
arma::vec triangl(const arma::mat& X){
  arma::mat LL = arma::trimatl(X, -1);  // omit the main diagonal
  return LL.elem(arma::find(LL != 0));
}

//[[Rcpp::export]]
double pmvnorm_cpp(arma::vec& bound, arma::vec& lowtrivec){
  double error;
  int n = bound.n_elem;
  double* boundptr = bound.memptr();
  double* lowtrivecptr = lowtrivec.memptr();
  double result = pmvnorm_P(n, boundptr, lowtrivecptr, &error);
  return result;
}
Run Code Online (Sandbox Code Playgroud)

从R构建程序包之后,这是一个可复制的示例:

set.seed(1)
covar <- rWishart(1, 10, diag(5))[,,1]
sds <- diag(covar) ^-.5
corrmat <- diag(sds) %*% covar %*% diag(sds)
triang <- triangl(corrmat)

bounds <- c(0.5, …
Run Code Online (Sandbox Code Playgroud)

r normal-distribution armadillo rcpp cdf

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

将Eigen :: MatrixXd转换为arma :: mat并在新对象上进行复制

我有一个函数,要将Eigen::MatrixXd对象转换为arma::mat

我知道这个问题,但似乎无法纠正我得到的行为。matrixxd_to_armamat从R 调用不会造成任何问题,问题是当我在C中的另一个函数中进行此转换时。这有点令人困惑,我想了解发生了什么。

#include <RcppArmadillo.h>
#include <RcppEigen.h>

// [[Rcpp::depends(RcppEigen)]]
// [[Rcpp::depends(RcppArmadillo)]]

using namespace std;

arma::mat matrixxd_to_armamat(Eigen::MatrixXd eigen_A) {
  arma::mat arma_B = arma::mat(eigen_A.data(), eigen_A.rows(), eigen_A.cols(),
                               false, false);
  return arma_B;
}

arma::mat matrixxd_to_armamat2(Eigen::MatrixXd& eigen_A) {
  arma::mat arma_B = arma::mat(eigen_A.data(), eigen_A.rows(), eigen_A.cols(),
                               false, false);
  return arma_B;
}



//[[Rcpp::export]]
arma::mat tester(){
  Eigen::MatrixXd A_eigen(2,2);
  A_eigen(0,0) = 1.0;
  A_eigen(1,0) = 2.0;
  A_eigen(0,1) = -1.0;
  A_eigen(1,1) = -2.0;

  Rcpp::Rcout << A_eigen << endl;

  arma::mat A_arma  = matrixxd_to_armamat(A_eigen);
  arma::mat A_arma2 …
Run Code Online (Sandbox Code Playgroud)

c++ armadillo rcpp eigen

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