Home > Software engineering >  How to get a multidimentional array of all products of two vectors in R?
How to get a multidimentional array of all products of two vectors in R?

Time:08-17

Is there a method that will take c(2, 3, 5) and c(7, 11) and and give me all element-wise products as an array?:

14 22
21 33
35 55

Bonus points if it can take more than two vectors or if it can take arrays as well as vectors (like take a 4D array, a 5D array, and a 6D array, and give me a 15D array as an output).

CodePudding user response:

Given two vectors a and b, we can use outer once:

mat <- outer(a, b)

The result is a matrix, with mat[i, j] for a[i] * b[j].


For more than two vectors, say a, b and c stored in a list, we iteratively apply outer:

arr <- Reduce("outer", list(a, b, c))

The result is a high-dimensional array, with arr[i, j, k] for a[i] * b[j] * c[k].

CodePudding user response:

  • We can use
t(sapply(x , \(x) x * matrix(y , ncol = 2)))
  • Output
    [,1] [,2]
[1,]   14   22
[2,]   21   33
[3,]   35   55
  • Data
x <- c(2, 3, 5)
y <- c(7, 11)
  • Related