我正在使用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语句获取形式为[]的数组。
对于需要此输入的其余代码,我可能完全错了,但是我不知道如何修改它,因此将其发布在这里。完整的代码如下:(它是@ Evolving functions in python上@ Attack68提供的代码的细微变化)它旨在存储一个函数,该函数在每次迭代时均与随机函数相乘并进行相应的集成。 (我在引起问题的函数上方的代码上加了注释)
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,answer)
这将返回以下错误:
TypeError: 'int' object is not callable