Вы можете использовать вхождение каждого цвета / числа во флисте в качестве индикации.Я предполагаю, что flist - это двумерный список.
import numpy as np
farray = np.array(flist)
prob_yellow = (farray==1).sum()/ (farray.shape[0] * farray.shape[1])
prob_purple = (farray==-1).sum()/ (farray.shape[0] * farray.shape[1])
prob_turqoise = (farray==0).sum()/ (farray.shape[0] * farray.shape[1])
Другой способ - это численная интеграция, если у вас есть массивы x и y линий, разделяющих цветные плоскости.Например:
from scipy import integrate
import numpy as np
x = np.arange(0,1,0.1)
y_purple = np.exp(-x)
prob_purple = integrate.simps(y_purple,x)
Редактировать: теперь я понимаю, что флист распределяется неравномерно.В этом случае я сначала преобразовал бы его в равномерно распределенный список, а затем использовал первый упомянутый метод.
Я создаю точки и флист:
points = np.array([[0,0],[0.4, 0.5],[0.5, 0.6],[1, 1]])
flist = np.random.randint(-1,2, size=len(points))
Затем выполняю интерполяцию:
import scipy.interpolate as intp
fintp = intp.NearestNDInterpolator(points, flist)
x = np.linspace(0,1,6)
y = np.linspace(0,1,6)
xx, yy = np.meshgrid(x, y)
positions = np.column_stack((xx.ravel(),yy.ravel()))
f_evenly = fintp(positions).reshape(len(x), len(y))
и вычисляю вероятность:
prob_yellow = (f_evenly==1).sum()/ (f_evenly.shape[0] * f_evenly.shape[1])
prob_turqoise = (f_evenly==0).sum()/ (f_evenly.shape[0] * f_evenly.shape[1])
prob_purple = (f_evenly==-1).sum()/ (f_evenly.shape[0] * f_evenly.shape[1])
Проверьте результат:
plt.imshow(f_evenly, extent=[0,1,0,1])
plt.show()
print('probabilities: \nyellow: %.2f\nturqoise: %.2f\npurple: %.2f'%(prob_yellow, prob_turqoise, prob_purple))
![Result](https://i.stack.imgur.com/3j8ye.png)
probabilities:
yellow: 0.47
turqoise: 0.36
purple: 0.17