在SymPy中分配Matrix切片

时间:2017-03-06 03:29:49

标签: matrix slice sympy

我想在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中有没有办法做到这一点?

1 个答案:

答案 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假定分配的块是连续的。