3

Suppose I have an ndarray, W of shape (m,n,n) and a vector C of dimension (m,n). I need to multiply these two in the following way

result = np.empty(m,n)
for i in range(m):
    result[i] = W[i] @ C[i]

How do I do this in a vectorized way without loops and all?

3 Answers 3

2

Since, you need to keep the first axis from both W and C aligned, while loosing the last axis from them with the matrix-multiplication, I would suggest using np.einsum for a very efficient approach, like so -

np.einsum('ijk,ik->ij',W,C)

np.tensordot or np.dot doesn't have the feature to keep axes aligned and that's where np.einsum improves upon.

Sign up to request clarification or add additional context in comments.

Comments

0

np.dot should be your friend. http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.dot.html

Comments

0

It's done using np.tensordot

ans=np.tensordot(W,C,axes=[2,1])[np.arange(m),:,np.arange(m)]
assert np.all(result==ans)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.