我的应用计算机科学课程的任务是测试算法的强度和质量,该算法试图找到列表中的第k个最高值。这将针对变化的k:s(0,1,2,...,k = N)和变化的N:s进行测试,其中我选择了k = 0和N(1,2,..., N)。我们应该确定算法是否比pi * N比较以及log2(N / 2-k)* N比较更多。
为了找到一些清晰度,我做了两个图,两个图都有y轴比较,而k轴和k轴分别为x轴。除了这些图,我想要函数y = pi * N和y = log2(N / 2-k)* N.问题是我得到了第二个函数的ValueError,最明显的是当N / 2 = k时。我仍然想在python中绘制它,我的问题是如何解决这个问题。
其余代码并不真正相关。 我的问题是:如何规避这个功能,同时规避它的未定义部分?我仍然想要说明未定义的部分,所以我不想做出简化的例外。
def plotHelper(x, yA, yS, title, trials):
yPi = list()
yLogN = list()
for point in x:
yPi.append(point*math.pi)
yLogN.append((trials*math.log(trials/2 - point, 2)
plt.figure()
plt.title(title)
plt.plot(x, yA)
plt.plot(x, yS)
plt.plot(x, yPi)
plt.plot(x, yLogN)
plt.grid(True)
plt.legend(["Mean", "Standard Deviation", "y = pi * N"])
plt.ylabel("Comparisons")
plt.xlabel("k")
plt.show()
def plot():
choice = initiate()
yA, yS, trials = trialFunc(choice)
x = range(0, trials)
f_of_k = "Comparisons as a function of desired k (N elements)"
f_of_n = "Comparisons as a function of elements (k = 0)"
if choice:
title = f_of_k
else:
title = f_of_n
plotHelper(x, yA, yS, title, trials)
答案 0 :(得分:1)
如果您不能将函数的值表示为数字,则可以将其表示为非数字也称为NaN。它没有现成的常量,但你可以很容易地产生这个值:
NaN = float('NaN')
现在你的功能可以这样:
def function_to_plot(n): # A contrived example.
if abs(n) <= 1:
return NaN
return sqrt(n * n - sin(n) ** 2)
之后,matplotlib
正常工作,它知道如何跳过NaN点。
如果您只想手动制表功能,可以使用浮动格式安全地打印NaN。
有关详细信息,您可以使用float('+inf')
和float('-inf')
来表示无穷大。
此外,以防万一,Python可以很好地处理复杂的数字; import cmath
并执行assert cmath.sqrt(-2j) == (1-1j)
等内容。