2016-05-26 2 views
2

Основываясь на упрощенном примере нижеДвойной суммирования матричных элементов в Python

enter image description here

Я хотел бы в моем коде

from sympy import* 
import numpy as np 
init_printing() 

x, y = symbols('x, y') 

mat = Matrix([[x,1],[1,y]]) 

X = [1, 2, 3] 
Y = [[10, 20, 30], [40, 50, 60], [70, 80, 90]] 

заменить символическую x и y со значениями X и Y и, конечно, вычислить двойное суммирование заданной матрицы.

Я пытаюсь решить это, но у меня тяжелое время с заменой на каждом шагу. Любая помощь будет высоко оценена.

ответ

3

Вы импортировали как SymPy, так и NumPy, поэтому у вас есть выбор инструментов здесь. И для работы по объединению множества числовых матриц, numpy - правильный инструмент. Вот как суммирование происходит в NumPy:

sum([sum([np.array([[x,1], [1,y]]) for y in yr]) for x, yr in zip(X,Y)]) 

Здесь год стоит для ряда элементов Y. Внешняя сумма сверх я индекс, внутренняя закончилась у, хотя список понимание устраняет необходимость заклинания их.

Результатом является массив NumPy:

array([[ 18, 9], 
     [ 9, 450]]) 

но вы можете превратить его в матрицу SymPy просто поместив Matrix() вокруг него:

Matrix(sum([sum([np.array([[x,1], [1,y]]) for y in yr]) for x, yr in zip(X,Y)])) 
+0

Спасибо, это работает. Однако в моем случае матрица больше и переписывание строк должно быть автоматизировано. Есть ли способ сделать это для каждой строки матрицы без необходимости переписывания каждой строки внутри массива? – mcluka

+0

Я не понимаю, что означает «переписывание строк». –

+0

Ну, вам нужно было написать [x, 1], [1, y] и преобразовать их в массив, но если размер матрицы больше, скажем, 10 строк, это было бы непрактично, так как вам нужно было бы написать все 10 строк внутри массива ... Я думал, что это можно сделать так, чтобы алгоритм сделал это для каждой строки (строки), не записывая ее внутри массива ... надеюсь, я сделал себе ясный :) – mcluka

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