【问题标题】:Double summation of matrix elements in PythonPython中矩阵元素的双重求和
【发布时间】:2016-05-26 18:45:42
【问题描述】:

基于下面的简化示例

我想在我的代码中

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]]

XY的值替换符号xy,当然计算给定矩阵的双重求和。

我正在尝试解决这个问题,但我在每个步骤中的替换都遇到了困难。 任何帮助将不胜感激。

【问题讨论】:

    标签: python python-2.7 python-3.x matrix sympy


    【解决方案1】:

    您已导入 SymPy 和 NumPy,因此您可以在此处选择工具。对于将一堆数字矩阵相加的工作,numpy 是正确的工具。以下是在 numpy 中求和的方式:

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

    这里 yr 代表 Y 的一行元素。外部总和超过 i 索引,内部总和超过 j,尽管列表推导消除了将它们拼写出来的需要。

    结果是一个 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)]))
    

    【讨论】:

    • 谢谢,这很好用。但是,在我的情况下,矩阵更大,并且必须自动重写行。有没有一种方法可以对矩阵的每一行执行此操作,而无需重写数组中的每一行?
    • 我不明白“重写行”是什么意思。
    • 好吧,你必须写 [x,1], [1,y] 并将它们转换成一个数组,但如果矩阵更大,比如 10 行,这不会是实用,因为您需要在数组中写入所有 10 行...我在想是否可以通过算法对每一行(行)执行此操作而不将其写入数组中的方式来完成...希望我让自己清楚:)
    • 好吧,必须以某种方式指定矩阵是什么。如果你有一个算法来计算它的行​​,那么定义一个接受 x,y 作为参数的函数并返回一个 numpy 数组。
    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 2023-03-03
    • 2011-12-28
    • 2023-03-25
    • 2023-04-07
    • 2017-03-05
    • 1970-01-01
    相关资源
    最近更新 更多