1

我想将整数的 3D 数组更改SymPy为有理数矩阵。我知道我应该使用Sympy(RationalMatrix) 但我不知道该怎么做。

例如,

[[[2, 1], [1, 3], [3, 2]], [[4, 3], [5, 2], [0, 1]]]

应该成为

2 1/3 3/2
4/3 5/2 0 

它应该看起来如何的图片:

想要的结果图片

4

1 回答 1

0

一种方便的方法是从函数创建矩阵,如下所示:

from sympy import Matrix, S
a = [[[2, 1], [1, 3], [3, 2]], [[4, 3], [5, 2], [0, 1]]]
m, n = len(a), len(a[0])
b = Matrix(m, n, lambda i, j: S(a[i][j][0])/a[i][j][1])

以上假设数组是一个嵌套的 Python 列表。如果它是一个 NumPy 3D 数组,可以这样做

from sympy import Matrix, S
import numpy as np
a = np.array([[[2, 1], [1, 3], [3, 2]], [[4, 3], [5, 2], [0, 1]]])
m, n, _ = a.shape
b = Matrix(m, n, lambda i, j: S(a[i, j, 0])/a[i, j, 1])

关于S(x)/yvs的注意事项Rational(x, y):前者是先转换x为 SymPy 对象的除法。(请参阅SymPy 数字。)这使得任何类型的整数输入都成为有理数。Rational(x, y)是 Rational 对象的直接构造,可以将 Python 整数作为输入,但np.int64数据类型存在问题。出于这个原因,Rational(a[i, j, 0], a[i, j, 1])在第二个片段中不起作用。(可能是一个 SymPy 错误。)

于 2018-04-17T20:23:25.787 回答