python求偏导函数_Python中多元函数的向量化偏导数

this thread中,alko发布了一个用于计算多元函数的偏导数的非凡答案.

我现在有一个关于增强此函数以接受输入值数组的后续问题.我有一些代码,我循环遍历一大堆n维点,计算每个变量的偏导数,这在计算上非常昂贵.

使用np.vectorize向所讨论的函数进行矢量化很容易,但它会导致partial_derivative包装器出现问题:

from scipy.misc import derivative

import numpy as np

def foo(x, y):

return(x**2 + y**3)

def partial_derivative(func, var=0, point=[]):

args = point[:]

def wraps(x):

args[var] = x

return func(*args)

return derivative(wraps, point[var], dx=1e-6)

vfoo = np.vectorize(foo)

>>>foo(3,1)

>>>10

>>>vfoo([3,3], [1,1])

>>>array([10,10])

>>>partial_derivative(foo,0,[3,1])

>>>6.0

>>>partial_derivative(vfoo,0,[[3,3], [1,1]])

>>>TypeError: can only concatenate list (not "float") to list

理想情况下,最后一行应返回[6.0,6.0].在这种情况下,提供给向量化函数vfoo的两个数组基本上是成对拉链的,因此([3,3],[1,1])变换为两个点,[3,1]和[3,1].当它传递给函数包装时,这似乎会受到损害.它最终传递给函数导数的点是[3,3].另外,显然会抛出TypeError.

有没有人有任何建议或建议?有没有人需要做类似的事情?

编辑

有时我认为发布SO就是打破精神障碍所需要的.我想我已经让那些可能感兴趣的人工作了:

vfoo = np.vectorize(foo)

foo(3,1)

X = np.array([3,3])

Y = np.array([1,1])

vfoo(X, Y)

partial_derivative(foo,0,[3,1])

partial_derivative(vfoo,0,[X, Y])

最后一行现在返回数组([6.,6.])

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值