Numpy将数组乘以矩阵(外积)

时间:2017-09-13 12:50:44

标签: python arrays numpy matrix

我有2个numpy形状阵列(5,1)说: A = [1,2,3,4,5] B = [2,4,2,3,6]

如何使矩阵乘以每个第i个元素与每个第j个?像:

cmd+z

不使用forloops?我可以使用重塑,缩减或乘法的任何组合吗?

现在我沿着行和沿着colums创建每个数组的a * b平铺,然后以元素方式相乘,但在我看来必须有一个更简单的方法。

2 个答案:

答案 0 :(得分:3)

使用numpy.outer()numpy.transpose()例程:

import numpy as np

a = [1,2,3,4,5]
b = [2,4,2,3,6]
c = np.outer(a,b).transpose()

print(c)

或者只是使用交换数组顺序:

c = np.outer(b, a)

输出;

[[ 2  4  6  8 10]
 [ 4  8 12 16 20]
 [ 2  4  6  8 10]
 [ 3  6  9 12 15]
 [ 6 12 18 24 30]]

答案 1 :(得分:2)

由于某些原因,%timeit np.outer(a,b) %timeit np.multiply.outer(a,b) %timeit a[:, None]*b 100000 loops, best of 3: 5.97 µs per loop 100000 loops, best of 3: 3.27 µs per loop 1000000 loops, best of 3: 1.38 µs per loop a = np.random.randint(0,10,100) b = np.random.randint(0,10,100) %timeit np.outer(a,b) %timeit np.multiply.outer(a,b) %timeit a[:, None]*b 100000 loops, best of 3: 15.5 µs per loop 100000 loops, best of 3: 14 µs per loop 100000 loops, best of 3: 13.5 µs per loop a = np.random.randint(0,10,10000) b = np.random.randint(0,10,10000) %timeit np.outer(a,b) %timeit np.multiply.outer(a,b) %timeit a[:, None]*b 10 loops, best of 3: 154 ms per loop 10 loops, best of 3: 154 ms per loop 10 loops, best of 3: 152 ms per loop 似乎比{{1}}小输入快。广播仍然更快 - 但对于更大的阵列,它们几乎都是平等的。

{{1}}