2016-11-28 4 views
-2

Ich versuche, das Minimum eines Arrays zu finden und es zu drucken. Einfach richtig? Scheinbar nicht. Mein Code:Unerwartete Ausgabe beim Drucken eines Arrays

array = generateAtoms(num) 
arrayPoints, vArraySum = moveMolecule(array, numSteps=steps) 
plotSetUp(arrayPoints) 
#print vArraySum 
print min(vArraySum), " kJ/mol is the minimum potential achieved" 

Ich erwarte meine Antwort im Bereich von -0,19. Wenn ich die obige Druckanweisung nicht drucke, beträgt meine Ausgabe ungefähr 9.000.000 kJ/mol. Wenn ich es drucke, ist meine Druckanweisung wie erwartet. Hier

ist ein Beispiel für vArraySum (wenn ich den Druck ausgeführt werden):

[88824.74221919772, 18198.301666484836, 3531.2537391848105, 3531.2537391848105, 
3531.2537391848105, 16.432760713742276, -0.09559319207145775, -0.09559319207145775, 
-0.19379982167330503, -0.19379982167330503, -0.19379982167330503, -0.19379982167330503, 
-0.19379982167330503, -0.19379982167330503, -0.19379982167330503, -0.19379982167330503, 
-0.19379982167330503, -0.19379982167330503, -0.19379982167330503, -0.19379982167330503] 

Wie wird meine Ausgabe zu ändern, wenn ich „beobachten“ (Drücken Sie verwenden)? Ich bin völlig am Ende. Hinzu kommt, dass die 9-Millionen-Zahl jedes Mal nicht die gleiche Zahl ist, sondern jedes Mal etwa 9 Millionen.

Edit2:

def moveMolecule(array, numSteps): 
# Moves molecules in random directions by adding random array 
# Will not move points if potential of system increases 
points = [] 
vArray = [] 
vArraySum = [] 
progress = 0 

points.append(array) 
for i in range(numSteps): 
    addArray = np.random.uniform(low=-0.2, high=0.2, size=(num,3)) 
    if sumV(np.add(array, addArray)) < sumV(array): 
     array = np.add(array, addArray) 
    else: 
     array = array 
    points.append(array) 
    vArray.append(vArrays(array)) 
    vArraySum.append(sumV(array)) 

    # Updates progress bar 
    progress = updateProgressBar(progress, i, numSteps) 

plotV(points, vArray) 

return points, vArraySum 

Edit3:

def functionV(r): 
# Function to calculate LJ potential 
return ((4 * _e) * (((_d/r) ** 12) - ((_d/r) ** 6))) 


def sumV(array): 
# Uses NN search to calculate sum of potential of system 
V = [] 

# Performs NN search to collect nearby radii 
points = NNSearchSetUp(array) 

radius = NNSearch(points) 

# Calculate potential for NNs 
for r in radius: 
    V.append(functionV(r)) 
return sum(V) 
+0

Können Sie weitere Informationen über Ihre Eingabe und die Logik hinter Ihrem Code hinzufügen, auch Sie erwartete Ausgabe? Eigentlich sehe ich nichts falsch in Ihrem Code. –

+0

Kann nicht reproduziert werden. – TigerhawkT3

+1

"Bitte lassen Sie mich wissen, wenn Sie weitere Informationen hinzufügen möchten". Wie wäre es mit den Funktionen, die Ihr Code verwendet? Wie können Sie erwarten, dass jemand weiß, warum 'generateAtoms()', 'moveMolecule' und/oder' plotSetUp' nicht wie erwartet funktionieren, wenn Sie diese Definitionen geheim halten? Bitte geben Sie ein [MCVE]. –

Antwort

0

es herausgefunden. vArraySum ist ein numpy Array. Muß nicht gut mit min spielen? Danke @ John. Werfen Sie das Array als Floats behoben das Problem

+0

'numpy' hat eine Funktion namens' np.min() ', die ebenfalls funktionieren sollte. Ich bin nicht ganz sicher, was das Problem mit 'min()' da ich denke, dass es funktionieren sollte. –