How to multiply two arrays element-wise

Paweł Żebrowski picture Paweł Żebrowski · Sep 27, 2016 · Viewed 7.3k times · Source

I need to multiply an array by another array element-wise, just like the Hadamard product of vectors in math. For example:

A = [1,2,3,4]
B = [2,3,4,5]
C = A*B = [2,6,12,20]

I can't even figure out the code, I've tried doing so element by element but this seems too messy of a solution for me, any ideas?

Answer

Martin R picture Martin R · Sep 27, 2016

"Zipping" the two arrays gives a sequence of tuples (a_i, b_i) which can then be multiplied element-wise:

let A = [1,2,3,4]
let B = [2,3,4,5]

let C = zip(A, B).map { $0 * $1 }

print(C) // [2, 6, 12, 20]

(If the arrays have different length then zip silently ignores the extra elements of the longer array.)

As @appzYourLife correctly said, you can also pass the multiplication operator directly as an argument to map instead of a closure expression:

let C = zip(A, B).map(*)