nan出现在矩阵的条目中

iezvtpos  于 2021-07-14  发布在  Java
关注(0)|答案(2)|浏览(496)

我做了一个10x10的零数组,让每个条目都等于一个足够简单的计算,当我显示我的矩阵时,很多数字前面都有一个nan,我不知道它是什么意思。这是我的密码:

  1. import numpy as np
  2. %pylab inline
  3. x1=[0.0,0.0,1.0,0.5,2.0,10.0,11.0,12.0,8.0,8.9]
  4. y1=[1.0,1.5,1.0,1.2,2.0,9.0,13.0,8.0,8.0,9.0]
  5. Dis1=np.zeros((10,10))
  6. for i in range(10):
  7. for j in range(10):
  8. Dis1[i][j]=sqrt((x1[i]-x1[j])**2-(y1[i]-y1[j])**2)
  9. print(Dis1)

谢谢

uplii1fm

uplii1fm1#

我假设,通过阅读你的代码,你得到了每个x1-y1对之间的距离。所以你应该用毕达哥拉斯定理,也就是a^2+b^2=c^2,而不是a^2-b^2=c^2。
将距离计算更改为 Dis1[i][j] = sqrt((x1[i] - x1[j])**2 + (y1[i] - y1[j])**2) 实际上,你试图取可能为负数的平方根,它返回nan。

dojqjjoe

dojqjjoe2#

如果你真的想计算矩阵 Dis1 ,则必须使用复数。

  1. import numpy as np
  2. x1=[0.0,0.0,1.0,0.5,2.0,10.0,11.0,12.0,8.0,8.9]
  3. x1=np.array(x1, dtype=complex)
  4. y1=[1.0,1.5,1.0,1.2,2.0,9.0,13.0,8.0,8.0,9.0]
  5. y1=np.array(y1, dtype=complex)
  6. Dis1=np.zeros((10,10), dtype=complex)
  7. for i in range(10):
  8. for j in range(10):
  9. Dis1[i][j]=sqrt((x1[i]-x1[j])**2-(y1[i]-y1[j])**2)

在你的问题中,每次当你试图计算 sqrt 输出为负数 nan . 对于复数,虚部是非零的。

  1. Dis1.imag
  2. array([[ 0. , 0.5 , -0. , 0. , 0. ,
  3. 0. , 4.79583152, 0. , 0. , 0. ],
  4. [ 0.5 , 0. , -0. , -0. , 0. ,
  5. 0. , 3.35410197, 0. , 0. , 0. ],
  6. [ 0. , 0. , 0. , 0. , 0. ,
  7. 0. , 6.63324958, 0. , 0. , 1.26095202],
  8. [ 0. , 0. , -0. , 0. , 0. ,
  9. 0. , 5.38423625, 0. , 0. , 0. ],
  10. [ 0. , 0. , 0. , 0. , 0. ,
  11. 0. , 6.32455532, 0. , 0. , 1.17898261],
  12. [ 0. , 0. , 0. , 0. , 0. ,
  13. 0. , 3.87298335, -0. , 0. , 0. ],
  14. [ 4.79583152, 3.35410197, 6.63324958, 5.38423625, 6.32455532,
  15. 3.87298335, 0. , -4.89897949, 4. , 3.40440891],
  16. [ 0. , 0. , 0. , 0. , 0. ,
  17. 0. , 4.89897949, 0. , 0. , 0. ],
  18. [ 0. , 0. , 0. , 0. , 0. ,
  19. 0. , 4. , -0. , 0. , 0.43588989],
  20. [ 0. , 0. , 1.26095202, 0. , 1.17898261,
  21. -0. , 3.40440891, -0. , 0.43588989, 0. ]])
展开查看全部

相关问题