Умножение списка из n фигур с массивами из n элементов в одну строку - PullRequest
2 голосов
/ 14 октября 2019

Давайте рассмотрим пример:

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 и возвращать вывод.

Пример использования для цикла:

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

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

1 Ответ

3 голосов
/ 14 октября 2019

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

, что соответствует первому элементу вашего исходного списка.

...