在Sympy中获取矩阵乘法的逐元素方程

迈克尔·舒伯特

我有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上面的方法做到这一点,然后得到结果为元素的方程式?

迈克尔·舒伯特

原来,这个问题有一个非常明显的答案:

MatrixSymbolsympy中的s可以像矩阵一样被索引,即:

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数组/矩阵进行所有操作(例如使用布尔等效项进行索引),因此创建numpy带有sympy符号数组可能会更好

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

NumPy中的逐元素矩阵乘法

来自分类Dev

Matlab中的逐元素矩阵乘法

来自分类Dev

tensorflow逐元素矩阵乘法

来自分类Dev

Matlab逐元素矩阵乘法

来自分类Dev

TensorFlow中矩阵和向量的高效逐元素乘法

来自分类Dev

在矩阵中逐元素复制

来自分类Dev

MatLab中的逐元素指数乘法

来自分类Dev

MatLab中的逐元素指数乘法

来自分类Dev

从未分离的txt文件中逐元素获取元素,并将其放入矩阵中

来自分类Dev

3D矩阵元素与2D矩阵副本的高效逐元素乘法?

来自分类Dev

python中矩阵的逐元素运算

来自分类Dev

如何在sympy中获取矩阵的元素对数?

来自分类Dev

MATLAB - 使用两个不同大小矩阵的逐元素矩阵乘法

来自分类Dev

Haskell中列表的逐元素加法(乘法,乘幂等)

来自分类Dev

Haskell中列表的逐元素加法(乘法,乘幂等)

来自分类Dev

Theano中的元素明智矩阵乘法

来自分类Dev

Rcpp中的元素明智矩阵乘法

来自分类Dev

Theano中的元素明智矩阵乘法

来自分类Dev

逐元素矩阵乘法:R与Rcpp(如何加快此代码的速度?)

来自分类Dev

稀疏矩阵的逐元素exp()

来自分类Dev

数组和向量的numpy逐元素乘法

来自分类Dev

特殊矢量和逐元素乘法

来自分类Dev

如何对Ruby数组执行逐元素乘法?

来自分类Dev

如何对Ruby数组执行逐元素乘法?

来自分类Dev

Numpy逐元素乘法(意外的整数溢出)

来自分类Dev

从两个2d矩阵中获得许多3d矩阵(逐列乘法)

来自分类Dev

数据表中的逐元素乘法-多个变量同时(R)

来自分类Dev

KISSFFT中2D阵列之间的逐元素乘法结果与SciPy FFT不同

来自分类Dev

CUDA中的3D元素矩阵乘法?