当前位置: 首页 > 面试题库 >

多参数函数的scipy.misc.derivative

孔正文
2023-03-14
问题内容

使用SciPy函数在相对于第一个参数的点上计算函数的偏导数很简单scipy.misc.derivative。这是一个例子:

def foo(x, y):
  return(x**2 + y**3)

from scipy.misc import derivative
derivative(foo, 1, dx = 1e-6, args = (3, ))

但是我将如何考虑foo第二个参数的函数派生呢?我能想到的一种方法是生成一个lambda函数来重新调整周围的参数,但是会很快变得麻烦。

另外,是否有一种方法可以针对函数的某些或所有自变量生成偏导数数组?


问题答案:

我会写一个简单的包装,类似

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)

演示:

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


 类似资料:
  • 声明和调用多参函数的语法往往成为错误的诱因。首先,要记住必须声明每个参数的类型。例: void printTime (int hour, int minute) { cout << hour; cout << ":"; cout << minute; } 很容易写成(int hour, minute),这种形式用于变量声明是合法的,但用于参数声明就不行。 另一个容易混淆的

  • 我正在用PowerShell编写一个脚本,在某个时候我需要在函数参数上使用ValidateSet。这是一个非常好的功能,但我需要的是更多的东西。 例如: 因此,此代码段允许我从列表中选择一个项目,如 然后将其打印到屏幕上。我想知道是否有可能允许选择多个值并将它们传递给来自一个验证集的函数,如下所示 也许有一个图书馆,或者我只是错过了一些东西,但我真的找不到一个解决方案。

  • 按值传递 Lua 函数的参数大部分是按值传递的。值传递就是调用函数时,实参把它的值通过赋值运算传递给形参,然后形参的改变和实参就没有关系了。在这个过程中,实参是通过它在参数表中的位置与形参匹配起来的。 示例代码: local function swap(a, b) --定义函数swap,函数内部进行交换两个变量的值 local temp = a a = b b = temp

  • 1、函数的参数类型 设置与传递参数是函数的重点,而 Python 的函数对参数的支持非常的灵活。 主要的参数类型有:默认参数、关键字参数(位置参数)、不定长参数。 下面我们将一一了解这几种参数。 2、默认参数 有时候,我们自定义的函数中,如果调用的时候没有设置参数,需要给个默认值,这时候就需要用到默认值参数了。 默认参数,只要在构造函数参数的时候,给参数赋值就可以了 例如: # -*- codin

  • 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。 Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。 默认参

  • 定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。 Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。 位置参

  • 参数声明 rust的函数参数声明和一般的变量声明相仿,也是参数名后加冒号,冒号后跟参数类型,不过不需要let关键字。需要注意的是,普通变量声明(let语句)是可以省略变量类型的,而函数参数的声明则不能省略参数类型。 来看一个简单例子: fn main() { say_hi("ruster"); } fn say_hi(name: &str) { println!("Hi, {}", nam

  • 毫无疑问,Vimscript函数可以接受参数。执行下面的命令: :::vim :function DisplayName(name) : echom "Hello! My name is:" : echom a:name :endfunction 执行下面的函数: :::vim :call DisplayName("Your Name") Vim将显示两行:Hello! My name