R、Python、Lua、Java、Matlab 或任何编程语言中是否有任何函数可以通过删除将 3D input_array 的大小从 c(6, 6, 6) 减小到 c(4, 4, 4) 3 维外围的全零矩阵?
## Create an empty array with all zeros
input_array <- array(data = c(0), dim = c(6, 6, 6))
## Populate the central locations of the array with 1
input_array[, ,2:5] <- matrix(c(0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 0,
0, 0, 0, 0, 0, 0),
nrow = 6, ncol = 6)
## Show the input_array
input_array
## The target output
output_array <- array(data = c(1), dim = c(4, 4, 4))
因此,换句话说,我正在寻找一个将 input_array 作为输入并将 output_array 作为输出的函数。我想在整个转换过程中保持阵列的 3D 特性。我研究这个的原因是我有非常大的 3D 阵列,外围有很多零,通过从三个维度中删除全零矩阵,我可以大大减少这些阵列的大小,因此允许进行更高效的处理。
如果那里没有函数,编写新函数以完成此操作的逻辑可能是什么?如果您有任何要分享的内容,请使用您喜欢的任何语言,非常感谢任何反馈或帮助。
请您参考如下方法:
在 abind 包的帮助下,您可以在 R 中做得相当好,这对于处理数组很方便:
abind::asub(input_array, # take this and subset
lapply(1:3, function(d){ # iterate over its dimensions
apply(input_array != 0, d, any) # look for any non-zero elements
}))
## , , 1
##
## [,1] [,2] [,3] [,4]
## [1,] 1 1 1 1
## [2,] 1 1 1 1
## [3,] 1 1 1 1
## [4,] 1 1 1 1
##
## , , 2
##
## [,1] [,2] [,3] [,4]
## [1,] 1 1 1 1
## [2,] 1 1 1 1
## [3,] 1 1 1 1
## [4,] 1 1 1 1
##
## , , 3
##
## [,1] [,2] [,3] [,4]
## [1,] 1 1 1 1
## [2,] 1 1 1 1
## [3,] 1 1 1 1
## [4,] 1 1 1 1
##
## , , 4
##
## [,1] [,2] [,3] [,4]
## [1,] 1 1 1 1
## [2,] 1 1 1 1
## [3,] 1 1 1 1
## [4,] 1 1 1 1
