python - Numpy 除以零。为什么?

标签 python numpy

import pygame
import random
import math
import numpy as np
import matplotlib.pyplot as plt
fx = np.zeros([11])
fy = np.zeros([11])
x = np.zeros([11])
y = np.zeros([11])
x[0] = 11
y[0] = 1
sigma = 1.01
e = 1.1
dt = 0.1
def LJ(x,y):
    for i in range(1,10):
        for j in range(1,10):
            rx = (x[i]-x[j])
            ry = (y[i]-y[j])
            fx[i] = 24*e*(((2/rx)*sigma/rx**12)-((1/rx)*sigma/rx**6))
            fy[i] = 24*e*(((2/ry)*sigma/ry**12)-((1/ry)*sigma/ry**6))
    print fx, fy

为什么还是报错 RuntimeWarning:在 double_scalars 中遇到被零除

RuntimeWarning: invalid value encountered in double_scalars

我得到的结果是

[  0.  nan  nan  nan  nan  nan  nan  nan  nan  nan   0.] [  0.  nan  nan  nan  nan  nan  nan  nan  nan  nan   0.]

我尝试修改开始的 x 和 y,但没有任何效果。

最佳答案

在这段代码中:

def LJ(x,y):
    for i in range(1,10):
        for j in range(1,10):
            ...

如果 i == j,您正在将粒子与自身进行比较。尝试像这样跳过 for 循环的迭代:

def LJ(x,y):
    for i in range(1,10):
        for j in range(1,10):
            if i == j:
                continue
            rx = (x[i]-x[j])
            ry = (y[i]-y[j])
            fx[i] = 24*e*(((2/rx)*sigma/rx**12)-((1/rx)*sigma/rx**6))
            fy[i] = 24*e*(((2/ry)*sigma/ry**12)-((1/ry)*sigma/ry**6))

此外,您还需要为 x 和 y 列表输入实际值,因为它们当前均为 0。根据该方程,位于完全相同位置的两个粒子会施加无限大的力,因此在这种情况下除以 0 是准确的。

关于python - Numpy 除以零。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29774191/

相关文章:

python - pygame 关于添加图层的帮助

python - 按特定值填充 Pandas Dataframe 缺失值

python - 更新 PriorityQueue

Python : Most efficient way to count elements of long list 1 in long list 2 ?(列表理解真的很慢)

python - 查找失败的索引 numpy.assert_almost_equal

python - Scrapy 部署与调试结果不匹配

python-3.x - 如何使 pandas read_csv 处理 numpy str(或 unicode)标量数据类型

python - 如何将 numpy Nd 数组作为最小示例的一部分进行通信?

python - 如何使用 Numpy 重新创建 sigma 符号?

python - 链接 ipython 小部件下拉列表和 slider 值