Python 如何将Numpy矩阵转换为Sympy矩阵

Python 如何将Numpy矩阵转换为Sympy矩阵,python,numpy,matrix,sympy,Python,Numpy,Matrix,Sympy,我已经构建了一个随机生成的指定大小的矩阵,这部分工作得很好。给它一个行和列的大小,并弹出一个从0到100的整数矩阵。最近,我试图对一个numpy矩阵执行一个sympy操作,python不断地攻击我。我很快了解到,sympy的操作无法在numpy矩阵上运行。所以我研究了如何将一个numpy转换成一个sympy,但更多的时候,我只发现使用lambdify将sympy转换成numpy。我想知道我是否可以使用lambdify still将numpy转换为sympy。这是我的密码 import math

我已经构建了一个随机生成的指定大小的矩阵,这部分工作得很好。给它一个行和列的大小,并弹出一个从0到100的整数矩阵。最近,我试图对一个numpy矩阵执行一个sympy操作,python不断地攻击我。我很快了解到,sympy的操作无法在numpy矩阵上运行。所以我研究了如何将一个numpy转换成一个sympy,但更多的时候,我只发现使用lambdify将sympy转换成numpy。我想知道我是否可以使用lambdify still将numpy转换为sympy。这是我的密码

import math
import numpy as SHIT
import sympy as GARBAGE
from sympy import *
from sympy import Matrix
from sympy.utilities.lambdify import lambdify, implemented_function
from sympy import Function
import __future__
import __init__
# init_print(use_unicode=True)

alpha = eval(input("How many rows? "))
beta = eval(input("How many columns? "))

def make_matrix(alpha,beta):
    matrix_thing = SHIT.random.randint(0,50,(alpha,beta))
    return(matrix_thing)
print(make_matrix(alpha,beta))

matrix_thing_sympy = lambdify(alpha,beta,make_matrix(alpha,beta), SHIT)
回溯:参数必须是字符串、dict或模块,但它是:[24 11] 未来警告:元素级比较失败;而是返回标量,但将来将执行元素级比较 如果modlist中有modname:

您看到的[24 11]来自随机生成的2乘2矩阵。那么,如果lambdify正在逐行读取,这怎么不是一个数字串呢?这是字符串:24,11。但是python似乎不同意我的观点

我已将最后一行的声明更改为以下内容,但没有一行有效

matrix_thing_sympy = lambdify(alpha,beta,make_matrix, SHIT)
AttributeError:模块“numpy”没有属性“doprint”

matrix_thing_sympy = lambdify((alpha,beta),make_matrix(alpha,beta), SHIT)
VisibleDepractionWarning:使用非整数而不是整数将导致将来出现错误 rational=rational)对于a]中的x)

lambda 2,2:([17 6] ^ SyntaxError:无效语法


对我来说,更重要的是,为什么这在默认情况下不起作用呢?我想如果一个矩阵是一个矩阵,那么它就是一个矩阵,谁会关心它是使用numpy sympy还是任何py制作的。我离题了,但也许这对我来说理解起来也不是一个半坏点。

TL;DRPerform
sympy.matrix(numpy_矩阵)

根据评论,我建议这样做

将NumPy矩阵转换为SymPy矩阵 之后

matrix_sympy.rref()
或者, NumPy也有RREF(严格来说,SciPy有)

这两种方法都不需要符号变量。NumPy不是一个狗屎东西

何时使用SymPy 一般来说,当你想找到一个用一个没有特定值的任意变量表示的一般解时,你需要SymPy

import sympy
x = symbols('x a b c')
y = a * x ** 2 + b * x + c # generall quadratic equation.
sympy.solve(y, x)
输出:

[(-b + sqrt(-4*a*c + b**2))/(2*a), -(b + sqrt(-4*a*c + b**2))/(2*a)]

在您的示例中,对于
alpha
beta

您是否可以使用
alpha
beta
而不使用
alpha,beta=symbols('alpha-beta')
?很抱歉,我没有完全理解,这是什么意思?
alpha,beta=symbols('alpha');打印(键入(alpha))
Sympy lambdify需要
Symbol
类,而不是整数。我喜欢这些淫秽的东西!我得开始这样编码:-)请原谅我的猥亵,我会试试这个谢谢你。因为numpy很好用,我不知道他们有线性代数的东西。至于sympy,我仍然不太明白你所说的alpha和beta是什么意思。它们只是用来构造矩阵的占位符,而不是作为符号变量的手段。谢谢你的Throughness@JeonIn简言之,sympy似乎无法生成维数不确定的矩阵。而且
(\uu,rref())
的结果得到了两个矩阵,为什么?没有
rref()
rref
import sympy
x = symbols('x a b c')
y = a * x ** 2 + b * x + c # generall quadratic equation.
sympy.solve(y, x)
[(-b + sqrt(-4*a*c + b**2))/(2*a), -(b + sqrt(-4*a*c + b**2))/(2*a)]