2017-03-06 86 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假定分配的塊是連續的。