首页 文章

在同情中得到矩阵乘法的元素方程

提问于
浏览
4

我有2个矩阵,其中第一个是稀疏的整数系数 .

import sympy
A = sympy.eye(2)
A.row_op(1, lambda v, j: v + 2*A[0, j])

第二个是象征性的,我在它们之间执行操作:

M = MatrixSymbol('M', 2, 1)
X = A * M + A.col(1)

现在,我想要的是获得元素方程式:

X_{0,0} = A_{0,0}
X_{0,1} = 2*A_{0,0} + A_{0,1}

一种方法是在 sympy 中指定一个矩阵,每个元素都是一个单独的符号:

rows = []
for i in range(shape[0]):
    col = []
    for j in range(shape[1]):
        col.append(Symbol('%s_{%s,%d}' % (name,i,j)))
    rows.append(col)
M = sympy.Matrix(rows)

有没有办法用上面的 MatrixSymbol 做,然后得到结果元素方程?

1 回答

  • 4

    事实证明,这个问题有一个非常明显的答案:

    同情的MatrixSymbol可以像矩阵一样索引,即:

    X[i,j]
    

    给出了元素方程 .

    如果想要对多个元素进行子集化,则必须首先将 MatrixSymbol 转换为 sympy.Matrix 类:

    X = sympy.Matrix(X)
    X        # lists all indices as `X[i, j]`
    X[3:4,2] # arbitrary subsets are supported
    

    请注意,这不允许 numpy 数组/矩阵的所有操作(例如使用布尔等价物进行索引),因此您最好使用 sympy 符号创建 numpy 数组:

    ijstr = lambda i,j: sympy.Symbol(name+"_{"+str(int(i))+","+str(int(j))+"}")
    matrix = np.matrix(np.fromfunction(np.vectorize(ijstr), shape))
    

相关问题