如何将Numpy矩阵转换为Sympy

时间:2016-09-21 14:41:23

标签: python numpy matrix sympy

我构建了一个随机生成的指定大小的矩阵,该部分效果很好。给它一个行和列大小,并从0到100繁殖一个整数的矩阵。最近我尝试对一个numpy矩阵执行一个sympy操作,python一直在崩溃我。我很快就知道,来自sympy的操作无法在numpy矩阵上运行。因此,我研究了如何将numpy转换为sympy,但更多时候我只是使用lambdify找到了numpy。我想知道我是否可以使用lambdify仍然可以从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)

回溯:参数必须是字符串,字典或模块,但它是:[24 11] FutureWarning:元素比较失败;返回标量,但将来会执行元素比较   如果modlist中的modname:

你看到的[24 11]来自一个随机生成的2乘2矩阵。因此,如果lambdify逐行读取,那么这不是一串数字?这是字符串:24,11。但是python似乎并不认同我。

我已将最后一行的陈述改为以下内容,但都没有。

matrix_thing_sympy = lambdify(alpha,beta,make_matrix, SHIT)

AttributeError:module'numpy'没有属性'doprint'

matrix_thing_sympy = lambdify((alpha,beta),make_matrix(alpha,beta), SHIT)

VisibleDeprecationWarning:使用非整数而不是整数将导致将来出错   理性=理性)对于a]中的x

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

对我来说更重要的是,为什么这不会默认工作?我曾经想过矩阵是一个矩阵,它是一个矩阵,并且关心它是否是使用numpy sympy或任何py来制作的。我离题了,但也许这对我来说也不是一个坏点。

1 个答案:

答案 0 :(得分:1)

TL; DR 执行sympy.Matrix(numpy_matrix)

从评论中,我建议

将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)

matrix_sympy = Matrix(make_matrix(alpha, beta)) # use sympy.Matrix()

之后

matrix_sympy.rref()

可替换地,

NumPy也有RREF(严格来说,SciPy)

import numpy as np
import scipy.linalg as la

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

matrix_numpy = make_matrix(alpha, beta)
(_, rref) = la.qr(matrix_numpy) # perform QR decomposition, R is RREF

这两种方法都不需要符号变量。 NumPy不是SHIT的东西。

何时使用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)]

在您的示例中,没有空间可以表示RREF相对于alphabeta