Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 计算numpy数组_Python_Numpy_Sympy - Fatal编程技术网

Python 计算numpy数组

Python 计算numpy数组,python,numpy,sympy,Python,Numpy,Sympy,我有一个返回numpy数组的函数,如下所示: import numpy as np from scipy.misc import derivative import sympy as sp x, y = sp.symbols('x y') f = x**2 + y **2 def grad(f): exp = sp.expand(f) dfdx = sp.diff(exp,x) dfdy = sp.diff(exp,y) global grad Df =

我有一个返回numpy数组的函数,如下所示:

import numpy as np
from scipy.misc import derivative
import sympy as sp

x, y = sp.symbols('x y')
f = x**2 + y **2
def grad(f):
    exp = sp.expand(f)
    dfdx = sp.diff(exp,x)
    dfdy = sp.diff(exp,y)
    global grad
    Df = np.array([dfdx,dfdy])
    return Df
我在另一个函数中使用变量
Df
,并用它进行一些计算

正如您可能猜到的,结果包括
x
y
。但是,每次都需要使用我为
x
y
而不是符号选择的初始值来评估结果


我想知道在Symphy中是否有类似于
.subs()
的东西,但它可以在numpy数组上工作,而不是在函数上工作???

Symphy和numpy是两个独立的世界,不容易结合在一起

使用Symphy的lambdify,可以使Symphy表达式处理numpy参数。当数组用作参数时,它们都需要是1D且大小相同。下面的函数
np\u grad\u 1
是它的工作原理。它返回一个包含两个子数组的数组

为了获得所需的功能,包装器可以接受2D numpy输入并将结果转换回2D numpy数组:

将sympy作为sp导入
将numpy作为np导入
x、 y=sp.symbols('x y')
f=x**2+y**2
def梯度(f、x、y):
exp=sp.exp(f)
dfdx=sp.diff(exp,x)
dfdy=sp.diff(exp,y)
返回[dfdx,dfdy]
np_grad_1=sp.lambdify([x,y],grad(f,x,y))
np_grad_2=lambda点:np.数组(np_grad_1(点[:,0],点[:,1])).T
点=np.随机.均匀(-1,1,(5,2))
np_grad_1(点[:,0],点[:,1])#返回一个包含2个子数组的数组
np_grad_2(点)#返回一个Nx2数组

为什么要使用
numpy
?坚持使用
sympy
您的
Df
是一个对象数据类型数组(查看
Df.dtype
)。这与列表基本相同。这种数组上的数学运算将动作委托给元素的方法。因此,数学是命中或未命中,而不是快速
numpy
sympy
对象没有“知识”。我在整个代码中使用numpy,不知怎的,我认为我应该让它也起作用,而不是考虑@JohanC said。谢谢大家。我的思维方式从一开始就完全错了。起初我试图使用lambdify,但不知怎的错过了!。这让我很清楚。谢谢,我可以修复代码中的很多部分。哦,我对StackOverflow比较陌生,我该怎么做?是的,我想我刚刚发现了怎么做