Я строю функцию в диапазоне значений, поэтому, естественно, я добавил numpy .arange () в функцию, чтобы получить зависимые значения для графика. Тем не менее, некоторые значения собираются в NaN или бесконечность. Я знаю, почему это происходит, поэтому я вернулся к функции и включил некоторые условные выражения. Если бы они работали, они заменили бы значения, приводящие к выходам NaN, только когда условия выполнены. Однако, исходя из ошибок, которые я получаю, кажется, что операции выполняются для каждой записи во входах, а не только при выполнении этих условий.
Мой код выглядит следующим образом
import matplotlib.pyplot as plt
import numpy as np
import math
k=10
l=50
pForPlot = np.arange(0,1,0.01)
def ProbThingHappens(p,k,l):
temp1 = (((1-p)**(k-1)*((k-1)*p+1))**l)
temp2 = (((1-p)**(1-k))/((k-1)*p+1))
if float(temp2) <= 1.0*10^-300:
temp2 = 0
print("Temp1 = " + str(temp1))
print("Temp2 = " + str(temp2))
temp = temp1*(temp2**l-1)
if math.isnan(temp):
temp = 1
print("Temp = " + str(temp))
return temp
plt.plot(pForPlot,ProbThingHappens(pForPlot,k,l))
plt.axis([0,1,0,1])
plt.xlabel("p")
plt.ylabel("Probability of thing happening")
plt.rcParams["figure.figsize"] = (20,20)
plt.rcParams["font.size"] = (20)
plt.show()
И ошибка, которую он возвращает:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-20-e707ad24af01> in <module>
20 return temp
21
---> 22 plt.plot(pForPlot,ProbAnyOverlapsAtAll(pForPlot,k,l))
23 plt.axis([0,1,0,0.01])
24 plt.xlabel("p")
<ipython-input-20-e707ad24af01> in ProbAnyOverlapsAtAll(p, k, l)
10 temp1 = (((1-p)**(k-1)*((k-1)*p+1))**l)
11 temp2 = (((1-p)**(1-k))/((k-1)*p+1))
---> 12 if float(temp2) <= 1.0*10^-300:
13 temp2 = 0
14 print("Temp1 = " + str(temp1))
TypeError: only size-1 arrays can be converted to Python scalars
Как указать в функции, над которой я хочу работать только точные c значения, а не весь производимый массив значений? Я предполагаю, что если я знаю, как заставить float () выбрать только одно значение, то это будет просто сделать то же самое для других условий. Мне ужасно жаль, если этот вопрос задавался раньше, но я искал ответы, используя все возможные выражения. Я боюсь, что в этом случае я просто не знаю, знаю правильную терминологию. Любая помощь будет принята с благодарностью.