0

像这样进行乘法的最简洁的方法是什么?

# c's are scalars (or arrays like A's in general)
x = np.array([c1, c2, c3])
# A's are NumPy arrays
M = np.array([A1, A2, A3])

要得到

x*M = [c1*A1, c2*A2, c3*A3]

c 是标量,A 是 NumPy 数字多维数组(比如说,矩阵)。


示例代码:

x = np.array([1,2,3])
A = np.random.rand(2,2)
M = np.array([A,A,A])
4

2 回答 2

2

如果 M 是原始数字类型的 numpy 数组(即不是对象),为了利用 numpy 广播,您可以添加维度,x使其具有与 相同的维度数M,然后按元素乘法应该起作用:

x.reshape((-1,) + (1,)*(M.ndim - 1)) * M

x = np.array([1,2,3])

二维案例:

M = np.arange(12).reshape(3,4)    
x.reshape((-1,) + (1,)*(M.ndim - 1)) * M
#array([[ 0,  1,  2,  3],
#       [ 8, 10, 12, 14],
#       [24, 27, 30, 33]])

3D案例​​:

M = np.arange(12).reshape(3,2,2)
x.reshape((-1,) + (1,)*(M.ndim - 1)) * M
#array([[[ 0,  1],
#        [ 2,  3]],

#       [[ 8, 10],
#        [12, 14]],

#       [[24, 27],
#        [30, 33]]])
于 2017-09-21T19:34:57.710 回答
-1

product = [x[i]*M[i] for i in range(len(x))]

于 2017-09-21T19:30:33.713 回答