У меня есть n скалярных функций f_1 (x) ... f_n (x), которые принимают векторы в 2d в качестве аргументов и дают положительные числа в качестве результатов.
Я хотел бы рассмотреть область пространства, скажем, [0,5,1,5] x [0,5,1,5], и оценить в каждой точке каждую из функций. Затем я хотел бы рассмотреть для каждой точки функцию, которая возвращает большее число, и, наконец, соответствующим образом раскрасить каждую область. Что-то вроде следующего изображения
Моя единственная идея - использовать сетку, например:
xspace = np.linspace(0.5, 1.5, 100)
yspace =np.linspace(0.5, 1.5, 100)
1011 * тогда *
for x,y in zip(xspace,yspace):
#evaluate each function, put it in an array and find the argmax
#plot accordingly
Однако это занимает значительное время и не «заполняет пустые» промежутки между точками.
Здесь я привожу пример функции (она принимает вектор x, среднее векторное значение и ковариационную матрицу 2x2. Если я изменяю любой из этих двух параметров, я получаю разные результаты):
def evaluatenormal(x,mean,covariance):
xmat = np.matrix(x-mean)
product = np.matmul(xmat,np.linalg.inv(covariance)).dot(x-mean)
det = 1.0/np.sqrt((np.linalg.det(2*np.pi*covariance)))
return np.array(det*np.exp(-0.5*product))
covmatrixlist = [array([[8.98752810e-05, 4.36396621e-05],
[4.36396621e-05, 8.90258777e-05]]), array([[6.52653161e-04, 4.72522484e-05],
[4.72522484e-05, 2.06834746e-04]]), array([[0.00013799, 0.00014587],
[0.00014587, 0.00066962]]), array([[0.00026506, 0.00010979],
[0.00010979, 0.00020168]]), array([[5.60530822e-06, 7.61528333e-06],
[7.61528333e-06, 1.28104667e-05]])]
meanvectorlist=[array([0.985294 , 0.99022067]), array([0.93870517, 0.943673 ]), array([0.99626442, 0.89631108]), array([0.81331842, 1.03552492]), array([1.00284467, 1.00364 ])]
point = np.array(1,1)
for x in xspace:
for y in yspace:
answerarray=[]
for mean,cov in zip(meanvectorlist,covmatrixlist):
answerarray.append(evaluatenormal(x,mean,cov))
argmax=np.argmax(answerarray)
if argmax == 0:
plt.plot(x,y, color = 'g', marker ='.',markersize = 4)
elif argmax ==1:
plt.plot(x,y, color = 'b', marker ='.',markersize = 4)
elif argmax ==2:
plt.plot(x,y, color = 'r', marker ='.',markersize = 4)
elif argmax ==3:
plt.plot(x,y, color = 'y', marker ='.',markersize = 4)
elif argmax ==4:
plt.plot(x,y, color = 'k', marker ='.',markersize = 4)
plt.show()
Как я могу получить все пространство, заполненное цветом вместо сетки точек?