protected void Recompute()
{
nc = NarrayUtil.Max(classes) + 1;
nf = data[0].Dim(0);
CHECK_ARG(DataMin(data) >= 0 && DataMax(data) < 256, "min(data) >= 0 && max(data) < 256");
CHECK_ARG(NarrayUtil.Min(classes) >= -1 && NarrayUtil.Max(classes) < 10000,
"min(classes)>=-1 && max(classes)<10000");
CHECK_ARG(nc > 0, "nc > 0");
CHECK_ARG(nf > 0, "nf > 0");
}