【问题标题】:Numpy, RuntimeWarning: invalid value encountered in sqrtNumpy,RuntimeWarning:在 sqrt 中遇到无效值
【发布时间】:2018-06-01 11:13:31
【问题描述】:

我正在尝试在笛卡尔坐标中绘制一个球体。 但是,我得到一个半球体,好像 np.sqrt 只给了我正值。 我怎样才能完成球体? np.sqrt 的任何替代方案?

我知道如何在极坐标或正弦和余弦函数中绘制球体,所以我只对使用 x、y、z 值绘制它感兴趣,例如;

x**2+y**2+z**2=1

这是给出半球体和警告的代码;

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(20, 10))
ax = fig.add_subplot(1,2,1, projection = '3d')

xs=np.linspace(-1,1, 100)
ys=np.linspace(-1,1, 100)
xs,ys=np.meshgrid(xs,ys)
zs= np.sqrt(1-xs*xs-ys*ys)

ax.plot_surface(xs, ys, zs, lw = 0, antialiased = True)

【问题讨论】:

标签: python numpy plotly


【解决方案1】:

根据定义,平方根函数给出它的平方根数的正(也称为原理)根。

“负平方根”是方程 a^n = b 的一组更一般的解的一部分,其中 n 是根的度数,b 是您取平方根的数,并且a 是解决方案(a 和 b 可能很复杂)。

关键是“一般平方根”是模棱两可的,因为它对一个输入有一堆解决方案。它不是(数学)函数。 numpy 使用大家都使用的标准,也就是正解/原则解。

如果你想要一个球体,你可以制作两个半球体并将其中一个倒置。 (我不知道如何填补它们之间的空白:()

就运行时警告而言,您在网格角处取负数的平方根,在该角处没有(真正的)圆解。那里应该没有解决方案,因为那里不存在圆圈。 (如果你打印 zs,你应该会看到 NaN。)

【讨论】:

  • 谢谢!将 np.sqrt 视为数学平方根函数是我的错误。
猜你喜欢
  • 2016-12-31
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 2015-03-03
  • 2016-10-13
  • 2013-01-29
  • 2019-04-10
  • 2021-02-07
相关资源
最近更新 更多