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?
"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(*)