2017-03-06 88 views
2

我想用SymPy中的矩阵切片的值替换。明确地说,这将是像在SymPy中分配矩阵切片

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

SymPy矩阵的切片与NumPy数组的工作方式不同:A[0, :]是一个矩阵,而不是一维数组。作为documentation说:

片总是会给一个矩阵的回报,即使尺寸为1×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假定分配的块是连续的。