假设我们要计算行列式的4*4矩阵(比方说A).如果A是numerical matrix,那么它是

import numpy as np
A = np.array([[6,5,10,1],[7,10,7,6],[9,8,12,2],[4,9,11,3]])
np.linalg.det(A)
# 279.9999999999999

这样我们就可以很容易地得到上面的结果.为方便起见,我们采用另一种方法来获得相同的结果,如下所示

import numpy as np
a = '''
6 5 10 1
7 10 7 6
9 8 12 2
4 9 11 3
'''
A = np.matrix(a).reshape(4,4)
np.linalg.det(A)
# 279.9999999999999

即,首先将字符串矩阵转换为np.matrix,然后计算其行列式.

接下来,我们假设4*4矩阵A是symbolic matrix,例如,A具有一些元素符号W.r.tx.然后我们可以求助于sympy一揽子计划,它写道

import sympy as sy
x = sy.symbols('x')
A = sy.Matrix((
[1, x, x ** 2, 0],
[0, 1, x, x ** 2],
[x ** 2, 0, 1, x],
[x, x ** 2, 0, 1]
))
sy.det(A)
## x**8 + x**4 + 1

现在我的问题是,我们如何将文本符号(字符串)矩阵转换为行列式的渐近矩阵,就像numerical case中的那样?我试过了

import numpy as np
import sympy as sy
x = sy.symbols('x')
a = '''
1 x x**2 0
0 1 x x**2
x**2 0 1 x
x x**2 0 1
'''
# A = sy.Matrix(np.matrix(a).reshape(4,4)) #Error!!!
# A = sy.Matrix(sy.MatrixSymbol(a,4,4)) #Unexpected!!!
# sy.det(A)

而且A = sy.Matrix(np.matrix(a).reshape(4,4))A = sy.Matrix(sy.MatrixSymbol(a,4,4))都不起作用!我怎么才能补救这个问题呢?

推荐答案

您的字符串不是有效的表达式,但如果您将其拆分为有效的表达式,则sy.Matrix将转换这些字符串:

In [12]: a = '''
    ...: 1 x x**2 0
    ...: 0 1 x x**2
    ...: x**2 0 1 x
    ...: x x**2 0 1
    ...: '''

In [13]: a.split()
Out[13]: 
['1',
 'x',
 'x**2',
 '0',
 '0',
 '1',
 'x',
 'x**2',
 'x**2',
 '0',
 '1',
 'x',
 'x',
 'x**2',
 '0',
 '1']

现在:

In [14]: Matrix(a.split()).reshape(4, 4)
Out[14]: 
⎡         2    ⎤
⎢1   x   x   0 ⎥
⎢              ⎥
⎢             2⎥
⎢0   1   x   x ⎥
⎢              ⎥
⎢ 2            ⎥
⎢x   0   1   x ⎥
⎢              ⎥
⎢     2        ⎥
⎣x   x   0   1 ⎦

In [15]: Matrix(a.split()).reshape(4, 4).det()
Out[15]: 
 8    4    
x  + x  + 1

Python相关问答推荐

如何从具有多个嵌入选项卡的网页中Web抓取td类元素

在内部列表上滚动窗口

更改matplotlib彩色条的字体并勾选标签?

如何在箱形图中添加绘制线的传奇?

处理(潜在)不断增长的任务队列的并行/并行方法

在Python Attrs包中,如何在field_Transformer函数中添加字段?

无法通过python-jira访问jira工作日志(log)中的 comments

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

转换为浮点,pandas字符串列,混合千和十进制分隔符

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

如何排除prefecture_related中查询集为空的实例?

如何将一组组合框重置回无 Select tkinter?

从嵌套极轴列的列表中删除元素

Js的查询结果可以在PC Chrome上显示,但不能在Android Chrome、OPERA和EDGE上显示,而两者都可以在Firefox上运行

你能把函数的返回类型用作其他地方的类型吗?'

使用np.fft.fft2和cv2.dft重现相位谱.为什么结果并不相似呢?

TypeError:';Locator';对象无法在PlayWriter中使用.first()调用

在聚合中使用python-polars时如何计算模式

时间戳上的SOAP头签名无效

根据边界点的属性将图划分为子图