Умножение списка и списка списка - PullRequest
0 голосов
/ 24 декабря 2018

Математически я пытаюсь сделать умножение на xij * yi.В Python мне нужно умножить x и y списки, как показано ниже:

x = [[1,2,3],[4,5,6],[7,8,9]]
y = [10,100,1000]

xy = [[] for i in range(3)]

for i in range(3):
   for j in range(3):
       xy[i][j] += [y[i] * x[i][j]]

Однако я получаю ошибку «Список индексов вне диапазона», в то время как я ожидаю, что выходные данные будут следующими:

xy = [[10, 20, 30],[400, 500, 600],[7000, 8000, 9000]]

Можешь помочь?

Ответы [ 4 ]

0 голосов
/ 24 декабря 2018

Просто простой список пониманий:

x = [[1,2,3],[4,5,6],[7,8,9]]
y = [10,100,1000]

xy = [[y[i] * j for j in lst] for i, lst in enumerate(x)]
print(xy)

Вывод:

[[10, 20, 30], [400, 500, 600], [7000, 8000, 9000]]
0 голосов
/ 24 декабря 2018

Я думаю, что это решит проблему,

x = [[1,2,3],[4,5,6],[7,8,9]] 
y = [10,100,1000]
xy = []
for i in range(3):
    xy.append([])
    for j in range(3):
        xy[i].append(y[i]*x[i][j])
print (xy)

В python используйте list.append (), чтобы добавить значение в список.

0 голосов
/ 24 декабря 2018

Давайте воспользуемся numpy библиотечной функцией multiply() для решения этой проблемы с помощью списочных представлений -

import numpy as np
list([np.multiply(x[i],y[i]).tolist() for i in range(len(y))])
    [[10, 20, 30], [400, 500, 600], [7000, 8000, 9000]]
0 голосов
/ 24 декабря 2018

Вы были очень близки.Проблема заключалась в том, что вы использовали двойные индексы [i][j] для ссылки на свои вложенные списки.Вы должны просто использовать индекс i.Остальная часть вашего кода в порядке.

x = [[1,2,3],[4,5,6],[7,8,9]]
y = [10,100,1000]

xy = [[] for i in range(3)]

for i in range(3):
    for j in range(3):
        xy[i] += [y[i] * x[i][j]]

# [[10, 20, 30], [400, 500, 600], [7000, 8000, 9000]]

Альтернатива для использования append

for i in range(3):
    for j in range(3):
        xy[i].append(y[i] * x[i][j])

Альтернатива с использованием NumPy

import numpy as n
x = np.array([[1,2,3],[4,5,6],[7,8,9]])
y = np.array([10,100,1000])
xy = (x.T*y).T
...