I have a 3 dimensional data set that I am trying to manipulate in the following way.
data.shape = (643, 2890, 10)
vector.shape = (643,)
I would like numpy to see data as a 643 length 1-D array of 2890x10 matrices and calculate a dot product (sum-product?) between data and vector. I can do this with a loop, but would really like to find a way to do this using a primitive (this will be run many times across parallel nodes).
The equivalent loop (I believe):
a = numpy.zeros ((2890, 10))
for i in range (643):
a += vector[i]*data[i]
Thanks very much! Sorry if this is a repost, I've searched far and wide, and ended up making an account to ask you guys.
a = numpy.array ([[[1,1,1,1],[2,2,2,2],[3,3,3,3]], [[3,3,3,3],[4,4,4,4],[5,5,5,5]]])
b = numpy.array ([10,20])
# Thus,
a.shape = (2,3,4)
b.shape = (2,)
# Want an operation . such that:
a . b = [[10,10,10,10],[20,20,20,20],[30,30,30,30]] + [[60,60,60,60],[80,80,80,80],[100,100,100,100]]
= [[70,70,70,70],[100,100,100,100],[130,130,130,130]]
If your NumPy is new enough (1.6 or better), you could use numpy.einsum:
Or, without
np.einsum
, you could add extra axes tovector
and take advantage of broadcasting to perform the multiplication: