让我们举个例子:
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]
答案 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]])
与原始列表的第一个元素相对应。