尝试使用Numpy检查圆内的点

2024-10-06 07:11:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新来的numpy,有如下任务:我需要创建两个numpy随机整数数组(介于0+1之间)。一个numpy数组表示x坐标,另一个表示y坐标。然后我需要用平方根(x^2+y^2)<;1检查点是否落在半径为1的圆内。在

我现在只是想把我的数组平方,然后把它们加在一起。一个很简单的任务就是给我无穷无尽的麻烦。在

import matplotlib.pyplot as plt
import numpy as np

plots = 100

dataOne = np.random.random(size = plots)
dataTwo = np.random.random(size = plots)

circle = plt.Circle((0,0), 1, alpha = 0.1)
plt.gca().add_patch(circle)
plt.xlim(0, 5)
plt.ylim(0, 5)
plt.show()

squareDataOne = dataOne ** 2
squareDataTwo = dataTwo ** 2

if squareDataOne + squareDataTwo < 1:
    print("Now check square-root!")

我一直收到一条错误消息:具有多个元素的数组的真值不明确。使用a.any()或a.all()。有人能解释一下Python/Numpy为什么不喜欢这个吗?我被告知要尝试使用布尔表达式来分割数组。有谁能提供建议,以最好的方式将这一点纳入我的给定代码? 任何对新手的建议或建议都将不胜感激。在


Tags: importnumpysizeasnppltrandom数组
3条回答

I then need to check to see if the points fall inside a circle of radius one by using squareroot(x^2 + y^2) < 1.

您可以使用array filtering

pt_norm = (squareDataOne + squareDataTwo)
r_inside_circle = np.sqrt(pt_norm[pt_norm < 1])

这将给出r_inside_circle中圆内所有点的半径。当您增加值plots时,您将看到(4.0*len(r_inside_circle))/len(dataOne)将接近PI。在

squareDataOne如下所示:

[7.43871942e-02 2.73007883e-01 5.23115388e-03 6.57541340e-01
 3.08779564e-01 1.24098667e-02 5.08258990e-01 6.52590269e-01
 8.90656103e-02 3.76389212e-02 2.12513661e-01 2.79683875e-01
 7.76233370e-01 6.48353342e-02 8.01663208e-01 8.69331480e-01
 4.34903542e]

squareData2看起来很相似。if语句中的表达式:

^{pr2}$

生成此数组:

[ True False  True  True  True  True  True  True False False  True False
  True False False  True  True  True  True  True False  True False False
  True  True False  True  True  True  True  True  True  True  True  True
  True  True False False  True False]

因此,您的if语句需要一个TrueFalse值,并得到这个数组。错误消息告诉您,Python不知道如何将这个数组转换为单个TrueFalse值。在

我对你的代码的逻辑还不够了解,不知道你需要做些什么来解决这个问题。显然,您有很多数据,但是您希望决定一个二进制事件;如果您应该打印“现在检查平方根!”或者不是。我不知道你该怎么做。在

# Change number of random points to 5.
plots = 5
...
inside_circle = squareDataOne + squareDataTwo < 1
print(inside_circle)

output:
[False  True  True False False]

它表明inside_circle是一个由数据类型“bool”组成的numpy数组,指示每个点是否在圆内,而不是一个“bool”变量,这就是pythonif语句抛出错误的原因。您可以对inside_circle中的所有“bool”求和,以获得圆内的点数(对bool数组求和时,numpy将True视为1,False为0)。在

^{pr2}$

估计差不多了,对吧?在

相关问题 更多 >