Estou tentando percorrer o espaço de parâmetros de uma função de 6 parâmetros para estudar seu comportamento numérico antes de tentar fazer algo complexo com ela, então estou procurando uma maneira eficiente de fazer isso.
Minha função usa valores de flutuação dados uma matriz numpy de 6 dim como entrada. O que eu tentei fazer inicialmente foi o seguinte:
Primeiro, criei uma função que pega 2 matrizes e gera uma matriz com todas as combinações de valores das duas matrizes
from numpy import *
def comb(a,b):
c = []
for i in a:
for j in b:
c.append(r_[i,j])
return c
Então eu costumava reduce()
aplicar isso a m cópias da mesma matriz:
def combs(a,m):
return reduce(comb,[a]*m)
E então eu avalio minha função assim:
values = combs(np.arange(0,1,0.1),6)
for val in values:
print F(val)
Isso funciona, mas é muito lento. Eu sei que o espaço dos parâmetros é enorme, mas isso não deve ser tão lento. Eu apenas amostramos 10 6 (um milhão) de pontos neste exemplo e levou mais de 15 segundos apenas para criar a matriz values
.
Você conhece alguma maneira mais eficiente de fazer isso com numpy?
Posso modificar a maneira como a função F
leva seus argumentos, se for necessário.