numpy中两个数组的乘法

oalqel3c  于 2023-01-17  发布在  其他
关注(0)|答案(3)|浏览(172)

我有两个numpy数组:

x = numpy.array([1, 2])
y = numpy.array([3, 4])

我想创建一个元素产品矩阵:

[[3, 6],
 [4, 8]]

最简单的方法是什么?

afdcj2ne

afdcj2ne1#

一种方法是使用np.multiplyouter函数(如果您希望与问题中的顺序相同,则需要转置):

>>> np.multiply.outer(x, y).T
array([[3, 6],
       [4, 8]])

NumPy中的大多数ufuncs都有这个有用的outer特性(addsubtractdivide等),正如@Akavall所建议的,np.outer在这里的乘法情况下是等价的。
或者,np.einsum可以一次执行乘法和转置:

>>> np.einsum('i,j->ji', x, y)
array([[3, 6],
       [4, 8]])

第三种方法是在一个数组中插入一个新的轴,然后相乘,尽管这有点冗长:

>>> (x[:, np.newaxis] * y).T
array([[3, 6],
       [4, 8]])

对于那些对性能感兴趣的人,下面是两个长度为15的数组上的操作时间,从最快到最慢:

In [70]: x = np.arange(15)
In [71]: y = np.arange(0, 30, 2)
In [72]: %timeit np.einsum('i,j->ji', x, y)
100000 loops, best of 3: 2.88 µs per loop
In [73]: %timeit np.multiply.outer(x, y).T
100000 loops, best of 3: 5.48 µs per loop
In [74]: %timeit (x[:, np.newaxis] * y).T
100000 loops, best of 3: 6.68 µs per loop
In [75]: %timeit np.outer(x, y).T
100000 loops, best of 3: 12.2 µs per loop
wvmv3b1j

wvmv3b1j2#

您可以使用np.outer

In [7]: x = np.array([1, 2])

In [8]: y = np.array([3, 4])

In [10]: np.outer(x,y).T
Out[10]: 
array([[3, 6],
       [4, 8]])
quhf5bfb

quhf5bfb3#

B = np乘以外部(x,y).T
链接:http://pchanial.github.io/python-for-data-scientists/auto_examples/ufunc_matrices.html
以下是针对这些问题很好的教程,此地址可以提供帮助:Link

相关问题