rashid1368
پنج شنبه 31 اردیبهشت 1394, 11:17 صبح
سلام به همه دوستان برنامه نویس
این فرمول را درنظر بگیرید ( Fuzzy C_Means):
131462
این فرمول، قسمتی از خوشه بندی fuzzy C_Means هست. فرض کنید P یک آرایه 1000*128 (1000 سطر و 128 ستون) هست و V هم یک آرایه 1500*128 ( 1500 سطر و 128 ستون ). همچنین Vi و Vn و Pj، آرایه های 1*128 هستند. منظور از Uij در فرمول، یعنی مقدار محاسبه شده برای Pj و Vi. در واقع برای تک تک سطرهای آرایه های P و V این فرمول باید محاسبه بشه. خود من کد زیر را برای محاسبه فرمول نوشتم:
function BOW = fuzzy_hist(V, P)
m = 2 ;
BOW = zeros(1,size(V,1));
dTotal = EuclideanDistance(P, V);
for i = 1 : size(V,1)
u = 0;
tStart = tic;
% u = sum(power(dTotal(:,i)' / dTotal(:,:)', m))';
for j = 1 : size(P,1)
for n = 1 : size(V,1)
u = u + power(dTotal(j,i) / dTotal(j,n), m);
end
% s = power(dTotal(j,i) / dTotal(j,:), m);
end
fprintf('* %i : %i in %f\n', curIdx, i, toc(tStart));
BOW(1,i) = 1 / u;
end
end
مشکل من، زمان اجرای این تابع هست. تقریبا 30 - 40 ثانیه برای آرایه های گفته شده طول می کشه.
آیا پیاده سازی سریعتری برای این فرمول وجود داره؟ مثلا در حد یکی دو ثانیه یا کمتر؟
کد مربوط به EuclideanDistance هم از این لینک می تونید دانلود کنید. 131464
یه نکته دیگه این که علامت || که در فرمول هست را می شه با فاصله اقلیدسی محاسبه کرد.
||A-B|| = sqrt ( ||A||^2 + ||B||^2 - 2*A.B )
یه نکته دیگه این که: من نمی خوام خوشه بندی انجام بدمم. فقط می خوام این فرمول را پیاده کنم. همین!!!!
پیشاپیش از همه شما دوستان تشکر می کنم.
این فرمول را درنظر بگیرید ( Fuzzy C_Means):
131462
این فرمول، قسمتی از خوشه بندی fuzzy C_Means هست. فرض کنید P یک آرایه 1000*128 (1000 سطر و 128 ستون) هست و V هم یک آرایه 1500*128 ( 1500 سطر و 128 ستون ). همچنین Vi و Vn و Pj، آرایه های 1*128 هستند. منظور از Uij در فرمول، یعنی مقدار محاسبه شده برای Pj و Vi. در واقع برای تک تک سطرهای آرایه های P و V این فرمول باید محاسبه بشه. خود من کد زیر را برای محاسبه فرمول نوشتم:
function BOW = fuzzy_hist(V, P)
m = 2 ;
BOW = zeros(1,size(V,1));
dTotal = EuclideanDistance(P, V);
for i = 1 : size(V,1)
u = 0;
tStart = tic;
% u = sum(power(dTotal(:,i)' / dTotal(:,:)', m))';
for j = 1 : size(P,1)
for n = 1 : size(V,1)
u = u + power(dTotal(j,i) / dTotal(j,n), m);
end
% s = power(dTotal(j,i) / dTotal(j,:), m);
end
fprintf('* %i : %i in %f\n', curIdx, i, toc(tStart));
BOW(1,i) = 1 / u;
end
end
مشکل من، زمان اجرای این تابع هست. تقریبا 30 - 40 ثانیه برای آرایه های گفته شده طول می کشه.
آیا پیاده سازی سریعتری برای این فرمول وجود داره؟ مثلا در حد یکی دو ثانیه یا کمتر؟
کد مربوط به EuclideanDistance هم از این لینک می تونید دانلود کنید. 131464
یه نکته دیگه این که علامت || که در فرمول هست را می شه با فاصله اقلیدسی محاسبه کرد.
||A-B|| = sqrt ( ||A||^2 + ||B||^2 - 2*A.B )
یه نکته دیگه این که: من نمی خوام خوشه بندی انجام بدمم. فقط می خوام این فرمول را پیاده کنم. همین!!!!
پیشاپیش از همه شما دوستان تشکر می کنم.