1

Я довольно новичок в python и получаю голову вокруг массивов как таковых, и меня поражает довольно простая проблема. У меня есть список списков, например:Python dot-multiply списки в списке списков, без использования numpy

a = [[1,0,1,0,1],[0,0,1,0,1],[0,0,1,0,1],[1,1,1,0,1],[1,0,0,0,0]] 

, и я хотел бы умножить элементы каждого списка друг на друга. Что-то вроде:

a_dot = [1,0,1,0,1]*[0,0,1,0,1]*[0,0,1,0,1]*[1,1,1,0,1]*[1,0,1,0,0] 
=[0,0,1,0,0] 

было интересно, смогу ли я сделать выше без с помощью Numpy/SciPy.

Спасибо.

+0

Ваши значения всегда равны 0 и 1? Поскольку это позволит использовать ярлыки, элемент в результате равен 0, если в пунктах – RemcoGerlich

+0

есть 0, для этого случая да, я имею дело только с 0 и 1, но я бы хотел получить общее решение для этого умножения. – AJW

+0

@AJW: целое или реальное? – smci

ответ

6
import operator 
a_dot = [reduce(operator.mul, col, 1) for col in zip(*a)] 

Но если все ваши данные 0s и 1s:

a_dot = [all(col) for col in zip(*a)] 
+0

Никогда не слышал о 'operator' раньше. Что это за 'col, 1'do здесь? – AJW

+0

Может использовать некоторые объяснения; 'zip (* rows)' переносит матрицу и что они аргументы для 'сокращения'. – RemcoGerlich

+0

'operator.mul' является лишь сокращением для' lambda a, b: a * b'. Посмотрите документацию по уменьшению – Eric

0

ли вы пытаетесь уменьшить функцию? Вы называете это функцией (см. Ее как ваш оператор) и список, и она применяется так, как вы описали.

0

Вы можете решить, ниже код,

def multiply(list_a,list_b): 
    c = [] 
    for x,y in zip(list_a,list_b): 
     c.append(x*y) 
    return c 

reduce(lambda list_a,list_b: multiply(list_a,list_b), a) 

Днем кодирования !!!!

+0

'lambda list_a, list_b: multiply (list_a, list_b)' эквивалентно 'multiply' .... – Eric

Смежные вопросы