如何创建和绑定一个空的多维数组



我想创建一个空的多维数组,然后将其绑定到一个现有的数组。

如果我的数组不是空的,我可以绑定它与abind包:

library(abind)
c=matrix(0,2,3)
test=array(0,c(2,3,1))
test2=abind(test,c,along=3)
test2 #exactly what I expected
, , 1
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    0    0
, , 2
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    0    0

现在我想做同样的事情,除了两个完整的数组,我想让其中一个为空。下面是如果我有字符会发生的情况:

test3=character() #this is empty
test3=c(test3,'hi') #I bind the word hi to it
test3
[1] "hi"

如果我尝试使用数组,这并不完全工作:

empty=array()
abind(empty,test,along=3)
Error in abind(empty, test, along = 3) : 
'X1' does not fit: should have `length(dim())'=3 or 2

所以我假设array()不是如何创建一个空的多维数组。

注意两个命令之间的区别:

empty=array()
> empty
[1] NA
test3=character()
> test3
character(0)

你可以定义一个空数组,例如:

empty <- array(numeric(),c(2,3,0)) 

请注意,需要将至少一个维度设置为零,否则数组将根据定义包含某些内容。以一个矩阵为例,如果你定义了两个维度都大于零,你自动实例化了一个矩形结构,它不能是空的,最多只能被NAs填充。

话虽这么说,abind的工作原理与rbind/cbind相似,但在广义上。
因此,当rbind/cbind将一维结构添加到二维结构时,使用abind与三维数组一起使用,您需要向原始数组添加二维结构,因为您希望将新结构附加到所选维度

下面是一个从三维空数组开始使用abind的示例:

创建一个空数组2 x 3 x 0:

a <- array(numeric(),c(2,3,0)) 
> a
<2 x 3 x 0 array of double>
     [,1] [,2] [,3]
[1,]
[2,]

添加一个矩阵(或者一个2-dim数组,如果你喜欢)到数组的第三维,得到一个新的数组2 × 3 × 1:

a <- abind(a, matrix(5,nrow=2,ncol=3), along=3)
> a
, , 1
     [,1] [,2] [,3]
[1,]    5    5    5
[2,]    5    5    5

在前一个数组的第三维上再次添加一个矩阵(如果你喜欢,也可以添加一个2-dim数组),得到一个新的数组2 x 3 x 2:

a <- abind(a, matrix(7,nrow=2,ncol=3), along=3)
> a
, , 1
     [,1] [,2] [,3]
[1,]    5    5    5
[2,]    5    5    5
, , 2
     [,1] [,2] [,3]
[1,]    7    7    7
[2,]    7    7    7

相关内容

  • 没有找到相关文章