gpt4 book ai didi

r - R 中的自定义 tcrossprod 函数

转载 作者:行者123 更新时间:2023-12-01 09:01:42 25 4
gpt4 key购买 nike

我正在使用 tcrossprod在 R 中的矩阵上运行。它对我的数据及其转置进行叉积。即数据 %*% t(data)。

问题是,我不希望单独的运算(数据中的行和 t(data) 中的列之间)是乘法运算。是否可以在其中指定我自己的函数,以便实现相同的算法,但它执行其他操作而不是乘法。

我现在通过循环遍历矩阵并执行所需的操作来实现相同的结果,但是循环使这种方法变慢了。

这是我目前正在做的事情(但用其他东西替换 * 操作):

count<-nrow(data)
output<-sapply(1:count, function(x){
sapply(1:count, function(y){
sum((data[x,]+data[y,])*abs(data[x,]-data[y,]))
})
})

如有任何帮助,我们将不胜感激。

最佳答案

这将用更快的矩阵运算替换您的慢速 sapply 循环之一:

sapply(1:count, function(i, x) {
colSums((x + x[, i]) * abs(x - x[, i]))} , x = t(data))

为了让它更快一点,将 sapply 替换为 vapply:

vapply(1:count, function(i, x) {
colSums((x + x[, i]) * abs(x - x[, i]))} , numeric(count), x = t(data))

如果这对您来说仍然太慢,那么很可能 Rcpp 解决方案就可以了。否则,我看不到比这快得多的仅基于基础的解决方案(尽管我很高兴被证明是错误的。)

关于r - R 中的自定义 tcrossprod 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25763195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com