zardosht
دوشنبه 19 اسفند 1392, 23:21 عصر
با سلام خدمت دوستان عزیز ببخشید من این کد رو اماده کردم برای خوشه بندی ولی در زمان اجرا در بعضی از مواقع خطای
Index was outside the bounds of the array.
در خط
int[] duplicates = temp[al].Intersect(temp[rand[cx]]).ToArray();
میده میتونید راهنماییم کنید مشکل کجاست؟
double xy1 = 0;
double xy2 = 0;
double x1 = 0;
double y1 = 0;
double min = 1;//import
double dl = 0;
double[] simil = newdouble[all];
double result=0;
int ind = 0;
try
{
for (int al = 0; al < all; al++) //////محاسبه فاصله كسينوسي تك تك عناصر از مراكز خوشه
{
for (int cx = 0; cx < k; cx++) ///تعداد كلاستر ها
{
xy1 = 0;
xy2 = 0;
x1 = 0;
y1 = 0;
int[] duplicates = temp[al].Intersect(temp[rand[cx]]).ToArray();
foreach (var d in duplicates)
{
xy1 = xy1 + user[al, d] * user[rand[cx], d];
}
x1 = userHelp[al, 0];
y1 = userHelp[rand[cx], 0];
xy2 = Math.Sqrt(x1 * y1);
dl = dl + (1 - (xy1 / xy2)) * (1 - (xy1 / xy2));
if ((1 - (xy1 / xy2)) <= min)
{
min = (1 - (xy1 / xy2));
}
}
simil[al] = Math.Sqrt(dl); /////هر كدوم كمتر بود به عنوان مركز در نظر مي گيري
dl = 0;
}
//////////////////////////////مراكز جديد بازيابي مي شوند///////////////////////////////
if (simil.Length != 0)
{
ind = Array.IndexOf(simil, simil.Min());
result = simil.Min();
//center[i] = simil1[ind];
}
}
catch (IndexOutOfRangeException)
{
MessageBox.Show("Index Out Of range");
}
return (result);
}
Index was outside the bounds of the array.
در خط
int[] duplicates = temp[al].Intersect(temp[rand[cx]]).ToArray();
میده میتونید راهنماییم کنید مشکل کجاست؟
double xy1 = 0;
double xy2 = 0;
double x1 = 0;
double y1 = 0;
double min = 1;//import
double dl = 0;
double[] simil = newdouble[all];
double result=0;
int ind = 0;
try
{
for (int al = 0; al < all; al++) //////محاسبه فاصله كسينوسي تك تك عناصر از مراكز خوشه
{
for (int cx = 0; cx < k; cx++) ///تعداد كلاستر ها
{
xy1 = 0;
xy2 = 0;
x1 = 0;
y1 = 0;
int[] duplicates = temp[al].Intersect(temp[rand[cx]]).ToArray();
foreach (var d in duplicates)
{
xy1 = xy1 + user[al, d] * user[rand[cx], d];
}
x1 = userHelp[al, 0];
y1 = userHelp[rand[cx], 0];
xy2 = Math.Sqrt(x1 * y1);
dl = dl + (1 - (xy1 / xy2)) * (1 - (xy1 / xy2));
if ((1 - (xy1 / xy2)) <= min)
{
min = (1 - (xy1 / xy2));
}
}
simil[al] = Math.Sqrt(dl); /////هر كدوم كمتر بود به عنوان مركز در نظر مي گيري
dl = 0;
}
//////////////////////////////مراكز جديد بازيابي مي شوند///////////////////////////////
if (simil.Length != 0)
{
ind = Array.IndexOf(simil, simil.Min());
result = simil.Min();
//center[i] = simil1[ind];
}
}
catch (IndexOutOfRangeException)
{
MessageBox.Show("Index Out Of range");
}
return (result);
}