小编Dyl*_*ijk的帖子

获取向量乘积,然后将运算符应用于输出矩阵,然后对所有矩阵求和的有效方法

我有一个数据集,X包含n行和d列。我想将每行的点积转置为自身。在 R 代码中,这将是x %*% t(x),这给出了一个dbyd矩阵。

然后,我使用函数截断矩阵中的值:其中taudbyd矩阵。

trunc_operator = function(x, tau){

  x = ifelse(abs(x) > tau, tau*sign(x), x)
  return(x)

}
Run Code Online (Sandbox Code Playgroud)

我对每一行执行此操作,然后将它们按顺序添加在一起。

acf_mat = matrix(0, ncol(data), ncol(data))
for(i in 1:nrow(data)){
  acf_mat = acf_mat + mat_prod_pairwise_trunc(data[i,], data[i,], tau = tau)
}
Run Code Online (Sandbox Code Playgroud)

我按顺序执行此操作的原因是,我不必存储许多d矩阵d,而一次只需存储一个矩阵,因此使用的内存较少。

mat_prod_pairwise_trunc()函数先进行点积,然后应用该trunc_operator函数。

mat_prod_pairwise_trunc = function(x,y, tau){
  trunc_operator((x %*% t(y))/2,tau)
}
Run Code Online (Sandbox Code Playgroud)

然而for循环很慢,我想提高速度。

到目前为止的想法

  1. 使用Rcpp在 C++ 中编写整个 …

performance r matrix

8
推荐指数
3
解决办法
659
查看次数

想要根据因子列获取与平均值偏差的值的数据框

例子:

所以可以说我有这个数据框。

x = data.frame(factor = as.factor(c('a','a','b','b','c','c')),value1 = c(1,3,2,4,5,3), value2 = c(7,9,3,4,9,3))


    factor value1 value2
1      a      1      7
2      a      3      9
3      b      2      3
4      b      4      4
5      c      5      9
6      c      3      3
Run Code Online (Sandbox Code Playgroud)

我知道如何获得每个因素的平均值,我使用这种方法:

aggregate(x[,c(2,3)], list(x$factor), mean, na.rm = T )

Run Code Online (Sandbox Code Playgroud)

这给了我以下输出:

  Group.1 value1 value2
1       a      2    8.0
2       b      3    3.5
3       c      4    6.0
Run Code Online (Sandbox Code Playgroud)

我现在如何从原始数据框中的每个值中减去其因子的相应平均值。我使用的实际数据集很大,所以需要有一个很好的方法,我已经设法做到了,但我使用了复杂的 for 循环。

所以我想要的输出是:

  factor value1 value2
1      a     -1   -1.0
2      a      1    1.0
3      b …
Run Code Online (Sandbox Code Playgroud)

r dplyr data-cleaning tidyverse data-wrangling

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

指针索引

在下面的代码中,我将变量设置var为 20,然后将指针ptr设置为var. 然后该指针ptrptr保存了该指针的内存地址ptr

#include <stdio.h>

void pointers()
{
    int var = 20;
    int* ptr;
    ptr = &var;

    int *ptrptr = ptr;

    printf("Value at ptrptr[0] = %d \n", ptrptr[0]);
}

// Driver program
int main()
{
    pointers();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Value at ptrptr[0] = 20
Run Code Online (Sandbox Code Playgroud)

为什么ptrptr[0]返回存储的值val,而不是指针的内存地址ptr

我认为索引运算符[]返回该值存储的值。

c pointers

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