【问题标题】:nan appearing in entries of a matrixnan 出现在矩阵的条目中
【发布时间】:2021-07-04 13:55:21
【问题描述】:

我正在制作一个 10x10 的数组,其中包含零,并让每个条目都等于一个足够简单的计算,当我显示我的矩阵时,很多数字前面都有一个 nan,我不确定这意味着什么。这是我的代码:

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

谢谢

【问题讨论】:

  • 负数的平方根不是数字。您可能打算写((x1[i]-x[j])**2)**(1/2) - ((y1[i]-y[j])**2)**(1/2) 来计算距离?
  • 我只是将平方差移到括号内。
  • @Kevin: sqrt(-1)=i
  • 您的意思是sqrt(a + b) 而不是sqrt(a - b)

标签: python arrays python-3.x numpy nan


【解决方案1】:

如果你真的想计算矩阵Dis1,那么你必须使用complex numbers

import numpy as np
x1=[0.0,0.0,1.0,0.5,2.0,10.0,11.0,12.0,8.0,8.9]
x1=np.array(x1, dtype=complex)

y1=[1.0,1.5,1.0,1.2,2.0,9.0,13.0,8.0,8.0,9.0]
y1=np.array(y1, dtype=complex)

Dis1=np.zeros((10,10), dtype=complex)
for i in range(10):
    for j in range(10):
        Dis1[i][j]=sqrt((x1[i]-x1[j])**2-(y1[i]-y1[j])**2)

在您的问题中,每次您尝试计算负数的sqrt 时,输出都是nan。对于复数,虚部不为零。

Dis1.imag

array([[ 0.        ,  0.5       , -0.        ,  0.        ,  0.        ,
         0.        ,  4.79583152,  0.        ,  0.        ,  0.        ],
       [ 0.5       ,  0.        , -0.        , -0.        ,  0.        ,
         0.        ,  3.35410197,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  6.63324958,  0.        ,  0.        ,  1.26095202],
       [ 0.        ,  0.        , -0.        ,  0.        ,  0.        ,
         0.        ,  5.38423625,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  6.32455532,  0.        ,  0.        ,  1.17898261],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  3.87298335, -0.        ,  0.        ,  0.        ],
       [ 4.79583152,  3.35410197,  6.63324958,  5.38423625,  6.32455532,
         3.87298335,  0.        , -4.89897949,  4.        ,  3.40440891],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  4.89897949,  0.        ,  0.        ,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  0.        ,  0.        ,
         0.        ,  4.        , -0.        ,  0.        ,  0.43588989],
       [ 0.        ,  0.        ,  1.26095202,  0.        ,  1.17898261,
        -0.        ,  3.40440891, -0.        ,  0.43588989,  0.        ]])

【讨论】:

    【解决方案2】:

    我假设,通过阅读你的代码,你得到了每对 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2014-04-25
      • 2011-09-24
      • 2017-12-26
      • 1970-01-01
      • 2014-07-01
      • 2013-03-24
      相关资源
      最近更新 更多