我有一个三维数组,想要总结每个维度的值,最后得到一个数据矩阵.
这是一个例子:
array1 <- array(c(-5.5,6,3),dim = c(3,4,3))
matrix <- matrix(NA, nrow=3, ncol=4)
matrix
[,1] [,2] [,3] [,4]
[1,] -16.5 -16.5 -16.5 -16.5
[2,] 18 18 18 18
[3,] 9 9 9 9
Run Code Online (Sandbox Code Playgroud)
有可能以某种方式使用循环而不是使用任何应用函数吗?
提前致谢!
您的问题表明您不想使用某个apply功能,但如果您改变主意,则将保证金指定为c(1, 2):
apply(array1, MARGIN=c(1, 2), sum)
# [,1] [,2] [,3] [,4]
# [1,] -16.5 -16.5 -16.5 -16.5
# [2,] 18.0 18.0 18.0 18.0
# [3,] 9.0 9.0 9.0 9.0
Run Code Online (Sandbox Code Playgroud)
您确定要沿每个维度求和吗?您的示例显示了沿第三维的求和。
无论如何,这就是可以做到的(你明确表示你不想使用apply):
X <- array(c(-5.5,6,3), dim = c(3,4,3))
rows <- dim(X)[1]
cols <- dim(X)[2]
result <- matrix(0, nrow=rows, ncol=cols)
for (i in seq(rows)) {
for (j in seq(cols)) {
result[i,j] <- sum(X[i,j,])
}
}
Run Code Online (Sandbox Code Playgroud)
给你
> result
[,1] [,2] [,3] [,4]
[1,] -16.5 -16.5 -16.5 -16.5
[2,] 18.0 18.0 18.0 18.0
[3,] 9.0 9.0 9.0 9.0
Run Code Online (Sandbox Code Playgroud)
编辑:既然你问了(但我建议不要使用这个解决方案,因为它很慢,而且肯定不是在 R 中完成所有这一切的惯用方法):
result <- matrix(0, nrow=rows, ncol=cols)
for (i in seq(rows)) {
for (j in seq(cols)) {
for (k in seq(dim(X)[3])) {
result[i,j] <- result[i,j] + X[i,j,k]
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,result已用零初始化。如果不是这种情况,则必须在j和k循环之间对其进行初始化。
| 归档时间: |
|
| 查看次数: |
9252 次 |
| 最近记录: |