Skip to main content
 首页 » 编程设计

python之R之通过删除 x、y 和 z 维度的全零二维矩阵来调整 3D 数组的大小

2025年05月04日16tintown

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