【问题标题】:Summing several equal size matrices by elements按元素对几个大小相等的矩阵求和
【发布时间】:2016-05-29 10:55:39
【问题描述】:

我遇到了一个问题,我已经打开并解释了HERE。简而言之,我需要用值替换我的分析矩阵中的符号并将它们加在一起。为了更好地解释,我制作了下面的图片: 当然会有更多更大尺寸的矩阵。

但是,我决定以不同的方式解决这个问题,我首先将矩阵的所有不同变体保存在一个更大的数组中,然后从那里开始将它们加在一起。到目前为止,这是我的代码:

from sympy import*
import numpy as np
init_printing()

T, logS = symbols('T, logS')
sig_izris = [[300,320,310],[410,435,440],[505, 515, 520]]
temperatura = [[500],[550],[600]]
Nap = np.asarray(np.log10(sig_izris))
Temp = []
for i in range(len(temperatura)):
    Temp.append(temperatura[i][0]+273.15) #Conversion to  Kelvin

def double_sum(mat, temp, nap):
    mat_12 = mat.subs(T, temp)
    mat_12 = mat_12.subs(logS, nap)
    return np.asarray(mat_12) 


test = Matrix([[logS, T, -1],[1, T**2, logS**2],[logS**3, T**2, 1]])
matrika = test
A = []
for i in range(len(Temp)):
    for j in range(len(Nap[i])):
        A.append(double_sum(matrika, Temp[i], Nap[i][j]))
mat_sum = sum(A)
mat_sum

但我并不完全相信我的代码是 100% 正确的,或者是否可以优化流程。 我想知道按元素对多个数组求和的正确方法是什么。我尝试使用操作员模块中的add,甚至使用zip,但只是没有设法写入正确的代码。

【问题讨论】:

  • 所以你想添加几个矩阵元素?您的代码似乎不是一个最小的例子。
  • 不,它没有,但这就是为什么我将链接添加到我的原始问题。代码由两部分组成,在第一部分中,我定义了一个函数,用实际值替换矩阵中的符号。在第二部分中,我定义了矩阵并使用定义的函数将所有可能的 i-j 组合保存到数组 A 中。我认为这并不难理解......

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


【解决方案1】:

要添加几个与您的手写公式显示的大小相同的 NumPy 数组,您可以简单地编写

M = M1 + M2 + M3

SymPy 矩阵的添加方式类似。您可以将两者混合搭配:

import sympy
from sympy.abc import x
import numpy

A = sympy.Matrix([[x,0],[0,x]])
B = numpy.eye(2)
print A + B # Prints "Matrix([[x + 1.0, 0], [0, x + 1.0]])"

.

【讨论】:

  • 真正告诉你需要一个Minimal, Complete, and Verifiable 示例。您问题中的代码缩进不良,但在修复后也不起作用。 (例如,T 未定义。)
  • 对不起,我已经修好了。
  • 是的,在更新的代码中sum(A) 确实在其中添加了矩阵。您可以通过在sum(A) 之前打印A 来验证这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
相关资源
最近更新 更多