2016-11-28 4 views
-2

Я пытаюсь найти минимальный массив и распечатать его. Легко ли? Очевидно нет. Мой код:Неожиданный вывод при печати массива

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

Ожидаю, что мой ответ будет в диапазоне -0.19. Если я не печатаю заявление печати выше, мой выход составляет около 9 000 000 кДж/моль. Если я его распечатаю, моя заявка на печать будет такой, как ожидалось.

Вот пример vArraySum (если я запускаю печать):

[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] 

Как меняется мой выходной, когда я «наблюдать» (используя печать)? У меня полная потеря. Чтобы добавить, 9-миллионное число не является одинаковым числом каждый раз, но составляет около 9 миллионов каждый раз.

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

Можете ли вы добавить дополнительную информацию о своем вводе и логике вашего кода, а также ожидаемый результат? На самом деле я не вижу ничего плохого в вашем коде. –

+0

Невозможно воспроизвести. – TigerhawkT3

+1

«Пожалуйста, дайте мне знать, если есть какая-либо другая информация, которую вы хотели бы добавить». Как насчет функций, которые использует ваш код? Как вы ожидаете, что кто-нибудь узнает, почему 'generateAtoms()', 'moveMolecule' и/или' plotSetUp' не работает, как вы ожидаете, когда вы держите эти определения в секрете? Пожалуйста, дайте [mcve]. –

ответ

0

Фигурные его. vArraySum - это массив numpy. Не нужно играть с миром? Спасибо @ Джон. Листинг массива как поплавков исправил проблему

+0

'numpy' имеет функцию' np.min() ', которая также должна работать. Я не совсем уверен, что проблема с 'min()', так как я думаю, что она должна работать. –

Смежные вопросы