Я предполагаю, что вы конкретно хотите использовать списки, если это так, то вы можете использовать следующую однострочную строку (я предполагаю, что у вас произошла ошибка, и вы имели в виду вывод [[[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]])
, что соответствует первому элементу вашего исходного списка.