Python n个形状列表与n个形状数组元素相乘一行

Python n个形状列表与n个形状数组元素相乘一行,python,numpy,vectorization,matrix-multiplication,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): o

让我们举一个例子:

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,2],[3,4],[[8,10],[12,14]])

如果您想使用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]])
它对应于原始列表的第一个元素

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