Возможные цифры c ошибка для больших / маленьких значений numpy - PullRequest
0 голосов
/ 05 февраля 2020

Я пытался mimi c бесконечная сила, когда 2 частицы подходят слишком близко.

И расстояние, на котором это начинается, зависит от расстояния до суммы радиусов частиц.

def dist(a,b):#working and tested for normal values
    d_sq = 0
    if len(a) == len(b):
        for i in range(len(a)):
            d_sq = d_sq + (a[i] - b[i])**2
        return (d_sq)**(1/2)


D = float((dist(prtc.rs[i], prtc.rs[j]))/(prtc.rads[i] + prtc.rads[j]))
if D <1 + 10**(-10):
                    #f[i,j] is force on i by j repulsive and poining from j to i
                    #we want the force to blow up at such a distance
                    fs[i, j] = (1/(D-1))*unit(prtc.rs[i] - prtc.rs[j])
                    fs[j, i] = - fs[i, j]
                    f[i] = f[i] + fs[i,j]

Когда частицы находятся достаточно близко, т.е. dist (prt c .rs [i], prt c .rs [j]) <1, тип D преобразуется из числа с плавающей точкой в ​​np. Я получаю это сообщение об ошибке из двух элементов. </p>



  File "C:/Users/karth/Desktop/code/kphys/BaseEngine.py", line 114, in timestep
    prtc.vs = prtc.vs + np.divide(interaction(), prtc.ms)

  File "C:/Users/karth/Desktop/code/kphys/BaseEngine.py", line 86, in interaction
    /(prtc.rads[i] + prtc.rads[j]))

TypeError: only size-1 arrays can be converted to Python scalars

Я считаю, что частицы находятся слишком близко, чем то, с чем система может справиться, пожалуйста, исправьте меня, если я ошибаюсь. Если я прав, кто-нибудь знает какую-либо альтернативную реализацию?

1 Ответ

0 голосов
/ 05 февраля 2020
File "C:/Users/karth/Desktop/code/kphys/BaseEngine.py", line 55, in dist
    return np.sqrt(d_sq)

AttributeError: 'float' object has no attribute 'sqrt'

, что AttributeError говорит, что объект float не имеет атрибута sqrt. Атрибут обозначается object.attribute в python. Таким образом, говорится, что np теперь является float объектом, а не объектом пакета.

Где-то в вашей программе у вас есть переменная np, которую вы задали как float. После этого у вас больше не будет numpy. Может быть, это случится только тогда, когда частицы подойдут достаточно близко, и вот почему вы это видите. Но это, похоже, проблема. Проверьте исходный код BaseEngine.py

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...