TypeError: function() รับ 2 อาร์กิวเมนต์ (ให้ 1 รายการ) (python)

import numpy as np
import scipy.optimize as spo

def function(x,y):
    return (np.sin(x*y+y)*np.exp(-1*(x**2+y**2)))**-1


xi=[0,0]    
answer=spo.fmin(function,xi)
print 'the answer is', answer

ฉันกำลังพยายามย่อฟังก์ชั่นนี้ให้เล็กสุด อย่างไรก็ตามการทำงานจะเกิดขึ้น

TypeError: function() takes exactly 2 arguments (1 given)

person Sam Macpherson    schedule 05.12.2015    source แหล่งที่มา


คำตอบ (2)


scipy.optimize.fmin(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None)

พารามิเตอร์ func สามารถเรียกได้ func(x,*args)

ในกรณีนี้ fmin โทร function ด้วยพารามิเตอร์เดียว - x (ซึ่งก็คือ xi) ต้องส่งพารามิเตอร์ที่สองเป็นพารามิเตอร์ args

xi = 0
args = (0,)
answer = spo.fmin(function, x0=xi, args=args)

http://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.optimize.fmin.html

person Tomasz Jakub Rup    schedule 05.12.2015

ความตั้งใจของคุณที่จะย่อตัวแปรให้เหลือน้อยที่สุด 2 ตัว ('x', 'y') หรือมากกว่าหนึ่งตัว (โดยมี 'y' เป็นพารามิเตอร์เพิ่มเติม)?

def fn1(x, y):
    # x is minimization variable
    # y is extra argument
    return (np.sin(x*y+y)*np.exp(-1*(x**2+y**2)))**-1

def fn2(xy):
    # xy is minimization variable; assumed to be 2 elements
    x,y = xy                                             
    return (np.sin(x*y+y)*np.exp(-1*(x**2+y**2)))**-1

fmin มี 1 ตัวแปร; ล้มเหลว

In [35]: optimize.fmin(fn1, x0=0, args=(0,))
Warning: Maximum number of function evaluations has been exceeded.
Out[35]: array([ 0.])

fmin พร้อมอาร์เรย์ 2 องค์ประกอบ (x0 และฟังก์ชัน); ส่งคืนอาร์เรย์ 2 องค์ประกอบ

In [38]: optimize.fmin(fn2, x0=np.array([0,0]))
Optimization terminated successfully.
         Current function value: 2.227274
         Iterations: 64
         Function evaluations: 121
Out[38]: array([ 0.29782369,  0.62167083])
person hpaulj    schedule 05.12.2015