Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create and bind an empty multidimensional array

I want to create a empty multidimensional array and then bind it to an existing array.

If my array was not empty, I can bind it with the abind package:

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

Now I want to do the same thing except instead of two full arrays, I want one of them to be empty. Here is what would happen if I had characters:

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

This does not exactly work if I try to use arrays:

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

So I am assuming that array() is not how you create an empty multidimensional array.

Note the differences between the two commands:

empty=array()
> empty
[1] NA
test3=character()
> test3
character(0)
like image 808
Bobe Kryant Avatar asked Aug 15 '15 06:08

Bobe Kryant


People also ask

How do you create a multidimensional array?

You can create a multidimensional array by creating a 2-D matrix first, and then extending it. For example, first define a 3-by-3 matrix as the first page in a 3-D array. Now add a second page. To do this, assign another 3-by-3 matrix to the index value 2 in the third dimension.

How do you create an empty multidimensional array in Python?

Create empty array Python In python, we don't have built-in support for the array, but python lists can be used. Create a list [0] and multiply it by number and then we will get an empty array.

How do you declare an empty multidimensional array in Java?

To create an empty array, you can use an array initializer. The length of the array is equal to the number of items enclosed within the braces of the array initializer. Java allows an empty array initializer, in which case the array is said to be empty.


1 Answers

You can define an empty array for example in this way:

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

Note that you need to set at least one dimension to zero, otherwise the array will contain something by definition. Think for example to a matrix, if you define both dimensions greater than zero, you automatically instantiate a rectangular structure and it cannot be empty, at most it can be filled by NAs.

That being said, abind works like rbind/cbind but in a generalized way.
So, as rbind/cbind add a 1-dimensional structure to a 2-dimensional one, using abind with a 3-dimensional array, you need to add a 2-dimensional structure to the original array, since you want to append a new structure to a chosen dimension.

Here's an example of abind usage starting from a 3-dimensional empty array:

Create an empty array 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,]

Append a matrix (or a 2-dim array if you prefer) to the 3rd dimension of the array obtaining a new array 2 x 3 x 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

Append a matrix again (or a 2-dim array if you prefer) to the 3rd dimension of the previous array obtaining a new array 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

and so and so forth...

like image 81
digEmAll Avatar answered Sep 18 '22 22:09

digEmAll