#python #arrays #multidimensional-array #matrix-multiplication
#python #массивы #многомерный-массив #матрица-умножение
Вопрос:
Я пытаюсь умножить матрицу, содержащую размеры вокселей, на список одиночных чисел (содержащий количество вокселей). Что-то вроде этого:
a = [(1, 2, 3), (2, 3, 4)]
b = [5, 6]
hocuspocus = [1 * 2 * 3 * 5, 2 * 3 * 4 * 6] = [30, 144]
Поскольку мне нужно предоставить воксели в кубических миллиметрах, мне нужно умножить содержимое каждой строки матрицы друг на друга, а затем на список b. Еще не понял, как это сделать в python. У кого-нибудь есть какие-либо предложения? Спасибо.
Ответ №1:
Вы могли бы пойти на что-то вроде этого, которое использует prod()
функцию для умножения всех чисел в строке и уменьшения их в одно значение, а затем for
оператор понимания этого списка повторяет два списка a
b
и умножает их по элементам.
Python 3.7 или старше
from functools import reduce # Required in Python 3.
from operator import mul
def prod(iterable): # This function multiplies all numbers of a row.
return reduce(mul, iterable, 1)
a = [(1, 2, 3), (2, 3, 4)]
b = [5, 6]
out = [prod(row) * elem for row, elem in zip(a, b)]
print(out)
Python 3.8
В качестве альтернативы вы можете использовать встроенную prod()
функцию в math
модуле.
from math import prod
a = [(1, 2, 3), (2, 3, 4)]
b = [5, 6]
out = [prod(row) * elem for row, elem in zip(a, b)]
print(out)
Вывод:
[30, 144]
Комментарии:
1. Вау, большое спасибо за быстрый ответ! Я так долго пытался решить эту проблему, и с вашей помощью она отлично сработала! Спасибо!