gpt4 book ai didi

Python-np.random.choice

转载 作者:行者123 更新时间:2023-12-01 00:13:48 25 4
gpt4 key购买 nike

我正在使用 numpy.random.choice 模块根据函数数组生成选择“数组”:

def f(x):
return np.sin(x)

def g(x):
return np.cos(x)


base=[f, g]

funcs=np.random.choice(base,size=2)

此代码将生成一个包含 2 个项目的“数组”,引用基本数组中的函数。

写这篇文章的原因是,我已经打印了 funcs 的结果并收到了:

[<function f at 0x00000225AC94F0D0> <function f at 0x00000225AC94F0D0>]

显然,这以某种形式返回对函数的引用,而不是我理解该形式是什么或如何操作它,这就是问题所在。我想更改函数的选择,以便它是不再是随机的,而是取决于某些条件,因此可能是:

for i in range(2):
if testvar=='true':
choice[i] = 0
if testvar== 'false':
choice[i] = 1

这将返回一个索引数组以放入后面的函数中

问题是,代码的进一步操作(我认为)需要以前形式的函数引用: [ ] 作为输入,而不是简单的 0,1 索引数组,我不知道如何才能使用 if 语句获取 [ ] 形式的数组。

对于需要此输入的其余代码,我可能完全错误,但我不知道如何修改它,因此我将其发布在这里。完整代码如下:(这是 @Attack68 在 Evolving functions in python 上提供的代码的细微变化)它的目的是存储一个在每次迭代时乘以随机函数并相应积分的函数。 (我已在导致问题的函数上方的代码上添加了注释)

import numpy as np
import scipy.integrate as int

def f(x):
return np.sin(x)

def g(x):
return np.cos(x)

base = [f, g]

funcs = np.random.choice(base, size=2)
print(funcs)
#The below function is where I believe the [<function...>] input to be required
def apply(x, funcs):
y = 1
for func in funcs:
y *= func(x)
return y

print('function value at 1.5 ', apply(1.5, funcs))

answer = int.quad(apply, 1, 2, args=(funcs,))
print('integration over [1,2]: ', answer)

这是我实现非随机事件的尝试:

import numpy as np
import scipy.integrate as int
import random
def f(x):
return np.sin(x)

def g(x):
return np.cos(x)

base = [f, g]

funcs = list()
for i in range(2):
testvar=random.randint(0,100) #In my actual code, this would not be random but dependent on some other situation I have not accounted for here
if testvar>50:
func_idx = 0 # choose a np.random operation: 0=f, 1=g
else:
func_idx= 1
funcs.append(func_idx)
#funcs = np.random.choice(base, size=10)
print(funcs)
def apply(x, funcs):
y = 1
for func in funcs:
y *= func(x)
return y

print('function value at 1.5 ', apply(1.5, funcs))

answer = int.quad(apply, 1, 2, args=(funcs,))
print('integration over [1,2]: ', answer)

这将返回以下错误:

TypeError: 'int' object is not callable

最佳答案

如果:您正在尝试将对随机选择的函数列表进行操作的原始代码重构为使用与函数列表中的项目相对应的随机索引进行操作的版本。重构应用

def apply(x,indices,base=base):
y = 1
for i in indices:
f = base[i]
y *= f(x)
return y
<小时/>

...this returns a reference to the functions in some form, not that I understand what that form is or how to manipulate it...

函数是对象,列表包含对对象本身的引用。可以通过为它们分配一个名称然后调用它们或索引列表并调用对象来使用它们:

>>> def f():
... return 'f'

>>> def g():
... return 'g'

>>> a = [f,g]
>>> q = a[0]
>>> q()
'f'
>>> a[1]()
'g'
>>> for thing in a:
print(thing())

f
g

或者你可以传递它们:

>>> def h(thing):
... return thing()

>>> h(a[1])
'g'
>>>

关于Python-np.random.choice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59459525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com