按行执行某个愚蠢的乘法运算



我有两个NumPy数组,我想在每行中相互相乘。为了说明我的意思,我把代码放在下面:

import numpy as np 
a = np.array([
[1,2],
[3,4],
[5,6],
[7,8]])

b = np.array([
[1,2],
[4,4],
[5,5],
[7,10]])
final_product=[]
for i in range(0,b.shape[0]):
product=a[i,:]*b
final_product.append(product)

在NumPy中,有没有比使用循环和列表更直接、更快、更优雅的方法来进行上述逐行乘法?

通过使用适当的整形和重复,您可以实现您想要的目标,这里有一个简单的实现:

a.reshape(4,1,2) * ([b]*4)

如果长度是动态的,你可以这样做:

a.reshape(a.shape[0],1,a.shape[1]) * ([b]*a.shape[0])

注意:确保a.shape[1]b.shape[1]保持相等,而a.shape[0]b.shape[0]可以不同。

np.einsum可以处理这类问题(请参阅文档和本文(以获得更多了解。这是这方面最有效的方法之一:

np.einsum("ij, kj->ikj", a, b)

尝试:

n = b.shape[0]
print(np.multiply(np.repeat(a, n, axis=0).reshape((a.shape[0], n, -1)), b))

打印:

[[[ 1  4]
[ 4  8]
[ 5 10]
[ 7 20]]
[[ 3  8]
[12 16]
[15 20]
[21 40]]
[[ 5 12]
[20 24]
[25 30]
[35 60]]
[[ 7 16]
[28 32]
[35 40]
[49 80]]]

相关内容

  • 没有找到相关文章

最新更新