我想在SymPy中替换Matrix片段的值。显然,它会像
import sympy as sym
A = sym.Matrix(4, 4, range(16))
A[0, :] = [-1, -2, -3, -4]
但这会返回错误
ShapeError:
The Matrix `value` doesn't have the same dimensions as the in sub-
Matrix given by `key`.
在一个更有趣的例子中,我想做一些像
这样的事情A[0, 0::2] = [-1, -2]
A[0, 1::2] = [1, 2]
交替奇数和偶数列。
问题:在SymPy中有没有办法做到这一点?
答案 0 :(得分:1)
SymPy矩阵的切片与NumPy数组的工作方式不同:A[0, :]
是一个矩阵,而不是一维数组。正如documentation所说:
切片总是给出一个矩阵作为回报,即使尺寸是1 x 1
因此必须相应地完成作业:
A[0, :] = [[-1, -2, -3, -4]] # a matrix with 1 row
A[:, 0] = [[-1], [-2], [-3], [-4]] # a matrix with 1 column
A[:, 0] = sym.Matrix([3, 4, 5, 6]) # easier way to create a one-column matrix
不幸的是,分配到A[0, 0::2]
之类的非连续子矩阵(当前)并未实现:方法copyin_matrix假定分配的块是连续的。