Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在多个数组上应用R函数,返回相同大小的数组_Arrays_R_Plyr - Fatal编程技术网

Arrays 在多个数组上应用R函数,返回相同大小的数组

Arrays 在多个数组上应用R函数,返回相同大小的数组,arrays,r,plyr,Arrays,R,Plyr,我有两个2x2矩阵的数组,我想对每对2x2矩阵应用一个函数。下面是一个简单的例子,将a中的每个矩阵乘以B中相应的矩阵: A <- array(1:20, c(5,2,2)) B <- array(1:20, c(5,2,2)) n <- nrow(A) # Desired output: array with dimension 5x2x2 that contains # the product of each pair of 2x2 matrices in A and B.

我有两个2x2矩阵的数组,我想对每对2x2矩阵应用一个函数。下面是一个简单的例子,将a中的每个矩阵乘以B中相应的矩阵:

A <- array(1:20, c(5,2,2))
B <- array(1:20, c(5,2,2))
n <- nrow(A)
# Desired output: array with dimension 5x2x2 that contains 
# the product of each pair of 2x2 matrices in A and B.
C <- aperm(sapply(1:n, function(i) A[i,,]%*%B[i,,], simplify="array"), c(3,1,2))
无论如何,这并不是更干净更清晰


我试图将此作为一个最小的示例,但我的实际用例需要一个更复杂的矩阵对函数(我也希望将其扩展到两个以上的数组),因此我正在寻找一种可以通用和扩展的方法。

有时for循环是最容易遵循的。它还概括和衡量:

n <- nrow(A)
C <- A
for(i in 1:n) C[i,,] <- A[i,,] %*% B[i,,]

n有时for循环最容易遵循。它还概括和衡量:

n <- nrow(A)
C <- A
for(i in 1:n) C[i,,] <- A[i,,] %*% B[i,,]

n有时for循环最容易遵循。它还概括和衡量:

n <- nrow(A)
C <- A
for(i in 1:n) C[i,,] <- A[i,,] %*% B[i,,]

n有时for循环最容易遵循。它还概括和衡量:

n <- nrow(A)
C <- A
for(i in 1:n) C[i,,] <- A[i,,] %*% B[i,,]

nR的列表基础结构(似乎)比数组好得多,因此我也可以通过将数组转换为矩阵列表来实现它,如下所示:

A <- alply(A, 1, function(a) matrix(a, ncol=2, nrow=2))
B <- alply(A, 1, function(a) matrix(a, ncol=2, nrow=2))
mapply(function(a,b) a%*%b, A, B, SIMPLIFY=FALSE)

AR的列表基础结构(似乎)比数组好得多,因此我也可以通过将数组转换为矩阵列表来实现它,如下所示:

A <- alply(A, 1, function(a) matrix(a, ncol=2, nrow=2))
B <- alply(A, 1, function(a) matrix(a, ncol=2, nrow=2))
mapply(function(a,b) a%*%b, A, B, SIMPLIFY=FALSE)

AR的列表基础结构(似乎)比数组好得多,因此我也可以通过将数组转换为矩阵列表来实现它,如下所示:

A <- alply(A, 1, function(a) matrix(a, ncol=2, nrow=2))
B <- alply(A, 1, function(a) matrix(a, ncol=2, nrow=2))
mapply(function(a,b) a%*%b, A, B, SIMPLIFY=FALSE)

AR的列表基础结构(似乎)比数组好得多,因此我也可以通过将数组转换为矩阵列表来实现它,如下所示:

A <- alply(A, 1, function(a) matrix(a, ncol=2, nrow=2))
B <- alply(A, 1, function(a) matrix(a, ncol=2, nrow=2))
mapply(function(a,b) a%*%b, A, B, SIMPLIFY=FALSE)

A
D
D
D
D
D是的,我应该提到这是另一个显而易见的解决方案。我希望采用一种功能性方法,但与列表相比,R在使用数组执行功能性操作方面的基础设施似乎要少得多。我希望避免循环,以便更好地对更复杂的A和B表达式进行缩放,因此我没有所有的索引。在没有太多可读性损失的情况下,您可以用RcppArmadillo编写此循环,它与R/matlab在矩阵代数和索引方面非常相似。循环的缩放应该与
sapply
一样好。我见过循环是最快解决方案的情况。在函数中隐藏索引是很容易的:
combine是的,我应该提到这是另一个显而易见的解决方案。我希望采用一种功能性方法,但与列表相比,R在使用数组执行功能性操作方面的基础设施似乎要少得多。我希望避免循环,以便更好地对更复杂的A和B表达式进行缩放,因此我没有所有的索引。在没有太多可读性损失的情况下,您可以用RcppArmadillo编写此循环,它与R/matlab在矩阵代数和索引方面非常相似。循环的缩放应该与
sapply
一样好。我见过循环是最快解决方案的情况。在函数中隐藏索引是很容易的:
combine是的,我应该提到这是另一个显而易见的解决方案。我希望采用一种功能性方法,但与列表相比,R在使用数组执行功能性操作方面的基础设施似乎要少得多。我希望避免循环,以便更好地对更复杂的A和B表达式进行缩放,因此我没有所有的索引。在没有太多可读性损失的情况下,您可以用RcppArmadillo编写此循环,它与R/matlab在矩阵代数和索引方面非常相似。循环的缩放应该与
sapply
一样好。我见过循环是最快解决方案的情况。在函数中隐藏索引是很容易的:
combine是的,我应该提到这是另一个显而易见的解决方案。我希望采用一种功能性方法,但与列表相比,R在使用数组执行功能性操作方面的基础设施似乎要少得多。我希望避免循环,以便更好地对更复杂的A和B表达式进行缩放,因此我没有所有的索引。在没有太多可读性损失的情况下,您可以用RcppArmadillo编写此循环,它与R/matlab在矩阵代数和索引方面非常相似。循环的缩放应该与
sapply
一样好。我见过循环是最快解决方案的情况。在函数中隐藏索引非常简单:
combine