我刚接触numpy,任务如下:我需要创建两个由随机整数组成的numpy数组(介于0+1之间)。一个numpy数组表示x坐标,另一个表示y坐标。然后,我需要使用squareroot(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不喜欢这样吗?我被告知要尝试使用布尔表达式来对数组进行切片。有没有人能提供一些建议,让我把这一点融入到我给定的代码中?对新手的任何建议或提示都是非常感谢的。
发布于 2019-04-04 10:08:30
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语句中的表达式:
squareDataOne + squareDataTwo < 1生成以下数组:
[ 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语句需要一个True或False值,并获取此数组。错误消息告诉您,Python不知道如何将此数组转换为单个True或False值。
我不能很好地理解你的代码逻辑,不知道你需要做什么来修复这个问题。显然,您有很多数据,但是您希望确定一个二进制事件;如果您应该输出"Now check square-root!“或者不是。我不知道你该怎么做。
发布于 2019-04-04 10:11:39
然后,我需要使用
(x^2+ y^2) < 1来检查这些点是否落在半径为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。
发布于 2019-04-04 10:51:03
我认为你想要替换这个:
if squareDataOne + squareDataTwo < 1:
print("Now check square-root!")使用类似这样的东西:
# Calculate radii
radii = (squareDataOne + squareDataTwo)**0.5
# Create a boolean array (True/False values) for filtering
incircle = radii < 1
# Print the number of points inside the circle (Python 3.6+ for the f-string)
print(f"There are {np.sum(incircle)} points inside the circle")
# Plot the points within the circle
plt.scatter(dataOne[incircle], dataTwo[incircle])dataOne[incircle]和dataTwo[incircle]将仅从incircle值为True的每个数组中提取那些元素(即x,y坐标对)。
https://stackoverflow.com/questions/55506737
复制相似问题