一行中的n个形状列表与n个形状数组的乘法

时间:2019-10-14 10:08:50

标签: python numpy vectorization matrix-multiplication

让我们举个例子:

w =[1, 2] # as list
p = [[[1, 2], [3, 4]], [[4, 5], [6, 7]]] # as array

输出应为:

output =[[[1, 2], [3, 4]], [[8, 20], [12, 14]]]

但是,我想一行完成它。我正在寻找一个可以接受w和p参数并返回输出的函数。

使用for循环的示例:

dummy_array = np.zeros(shape=(2,2))

for i in range(2):
    output[i]= w[i]*p[i]

1 个答案:

答案 0 :(得分:3)

我假设您特别想使用列表,如果是这样,那么您可以使用以下单行代码(我假设您有一个错误,并且您的意思是输出为[[[1,2] ,[3、4]],[[8、10],[12、14]]])。

import numpy as np
p = [[[1, 2],[3, 4]], [[4, 5], [6, 7]]]
w = [1, 2]
output = [(np.array(p_curr)*w_curr).tolist() for p_curr, w_curr in zip(p,w)]

如果要使用numpy(这通常是这些类型的操作的标准程序包),则可以沿所需的轴进行乘法。例如,我们可以做:

import numpy as np
p = np.array([[[1, 2], [3, 4]], [[4, 5], [6, 7]]])
w = np.array([1, 2])[:, np.newaxis, np.newaxis]
output = p*w

请注意,我添加了两个新轴,并保留了原始(2)尺寸以与您要相乘的尺寸相对应。意思是,如果您使用代码段并选中p[0,:,:],则会得到:

array([[1, 2],
   [3, 4]])

与原始列表的第一个元素相对应。