2017-07-20 2 views
0

Ich versuche, die folgende Funktion zu definieren, aber ich glaube, ich mache einen Fehler irgendwo -Indexerror: nur ganze Zahlen, Scheiben (`:`), Auslassungszeichen (`...`), gelten Indizes

import numpy as np 
import math 

def banana(A,B,C1,C2,N,keep,init): 

R = init*keep + N*keep 
x1=x2=0 
bimat = np.zeros((N,2)) 
for r in range(1,R+1): 
    x1=np.random.normal((B*x2+C1)/(A*(x2**2)+1),math.sqrt(1/(A*(x2**2)+1))) 
    x2=np.random.normal((B*x1+C2)/(A*(x1**2)+1),math.sqrt(1/(A*(x1**2)+1))) 
    if (r>init*keep and r%keep==0): 
     mkeep=r/keep 
     bimat[mkeep-init,:]=np.array([x1, x2]) 

return(bimat) 

Wenn ich einige Werte in die Funktion, zum Beispiel passieren -

banana(0.5,0,3,3,1000,10,10) 

ich folgende Fehlermeldung erhalten -

IndexError        Traceback (most recent call last) 
<ipython-input-288-9d3d5702a1a0> in <module>() 
----> 1 banana(0.5,0,3,3,1000,10,10) 

<ipython-input-287-ac0004b13e9f> in banana(A, B, C1, C2, N, keep, init) 
     9   if (r>init*keep and r%keep==0): 
    10    mkeep=r/keep 
---> 11    bimat[mkeep-init,:]=np.array([x1, x2]) 
    12 
    13  return(bimat) 

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis 
(`None`) and integer or boolean arrays are valid indices 

weiß jemand, was migh t verursacht es?

Danke!

Antwort

1

Wenn Sie Python 3 verwenden, dann

mkeep=r/keep 

wird ein Schwimmer sein, der kein gültiger Index ist. Versuchen Sie, es auf int zu übertragen, oder verwenden Sie einfach mkeep=r//keep, um eine ganzzahlige Division zu erzwingen.

Verwandte Themen