فاطمه-زهرا 164 اشتراک گذاری ارسال شده در 13 مرداد، ۱۳۹۳ سلام یک سری داده (کروموزوم) باینری داریم، میخوایم فقط کروموزوم هایی رو که بیت اول و آخرشون 1 هست و هیچ دو بیت کنار همی 1 نیست رو انتخاب کنیم. ضمن تشکر از آقای انصاری، کدی رو که زحمت کشیدید و نوشتید جواب داد ولی متاسفانه من اصلا متوجه نشدم چکار میکنه. داده دسیمال من اعدادی بین صفر تا هشته. اول این داده های دسیمال رو به باینری تبدیل کردم. بعد تو یه حلقه گذاشتم. به نظرم اشتباه اومد! اینم کدش: Pop=xlsread('ِSolar-Data.xls'); Pop1=dec2bin(Pop); [NPar,NGene]= size(Pop1) for I=1:NPar for J=1:NGene if Pop1(1)~=Pop1(NGene)~=1 && Pop(J)~=Pop(J+1) Pop=BinaryData(I); end end end می خواستم کد آقای انصاری رو هم تغییر بدم و دیتای خودمو توش بذارم که نتونستم. A = (0:255)'; Bin_A_cell = arrayfun(@(x) bitget(x,8:-1:1),A,'Un',0); Bin_A = cell2mat(Bin_A_cell); idx1 = ~any(Bin_A(:,1:7) .* Bin_A(:,2:8),2); idx2 = Bin_A(:,1)~= 0 & Bin_A(:,8)~= 0; [A(idx1 & idx2) Bin_A(idx1 & idx2,:)] برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 6 لینک به دیدگاه
Imaaan 17059 اشتراک گذاری ارسال شده در 13 مرداد، ۱۳۹۳ سلام یک سری داده (کروموزوم) باینری داریم، میخوایم فقط کروموزوم هایی رو که بیت اول و آخرشون 1 هست و هیچ دو بیت کنار همی 1 نیست رو انتخاب کنیم. ضمن تشکر از آقای انصاری، کدی رو که زحمت کشیدید و نوشتید جواب داد ولی متاسفانه من اصلا متوجه نشدم چکار میکنه. داده دسیمال من اعدادی بین صفر تا هشته. اول این داده های دسیمال رو به باینری تبدیل کردم. بعد تو یه حلقه گذاشتم. به نظرم اشتباه اومد! اینم کدش: Pop=xlsread('ِSolar-Data.xls'); Pop1=dec2bin(Pop); [NPar,NGene]= size(Pop1) for I=1:NPar for J=1:NGene if Pop1(1)~=Pop1(NGene)~=1 && Pop(J)~=Pop(J+1) Pop=BinaryData(I); end end end می خواستم کد آقای انصاری رو هم تغییر بدم و دیتای خودمو توش بذارم که نتونستم. A = (0:255)'; Bin_A_cell = arrayfun(@(x) bitget(x,8:-1:1),A,'Un',0); Bin_A = cell2mat(Bin_A_cell); idx1 = ~any(Bin_A(:,1:7) .* Bin_A(:,2:8),2); idx2 = Bin_A(:,1)~= 0 & Bin_A(:,8)~= 0; [A(idx1 & idx2) Bin_A(idx1 & idx2,:)] سلام مقادیرتون که اعشاری هست، اعداد صحیح بین صفر تا هشت هم چنین خاصیتی ندارن، چون چهار بیت پر ارزش همشون صفر هست، که بیت آخر (یا اول بسته به طوری که در نظر می گیرین) رو شامل میشه. اما کد دوم رو هم بذارین توضیح بدم، A یه ماتریس ستونی از اعداد 0 تا 255 هست، می خوایم ببینیم چند تا از این اعداد چنین خواصی دارن، خب اول باید باینری اون ها بدست بیاریم، bin2dec رشته میده توی خروجی ولی bitget عدد معمولی میده راحت تر میشه باهاش کار کرد. خب مثلا عدد 19 رو می خوایم باینری 8 بیتی رو بدست بیاریم: برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام خب حالا اگه یه آرایه ای داشته باشیم بخوایم یه فانکشنی رو روی همه ی درایه ها اجرا کنیم (اینجا bitget) می تونیم به جای حلقه از arrayfun استفاده کنیم همین کار رو می کنه. حالا ما چون برای هر درایه ی ماتریس، 8 تا درایه (برای هر بیت یه دونه) داشته باشیم، متلب این پیش فرض رو داره شاید همه هم اندازه نشن و نتونه توی یه ماتریس بذاره. پس بهش بگیم که اعداد صفر و یک هر درایه مون رو داخل یه سلول از یه متغیر از نوع cell array بذاره، اینکار رو با پارامتر 'UniformOutput' (البته دو حرف اول هم کفایت می کنه) رو روی false یا همون صفر قرار میدیم. بعدش ما که می دونیم همه ی سلول ها 8 تا درایه دارن پس توی ماتریس می تونن قرار بگیرن، با cell2mat تبدیل به ماتریسش می کنیم. حالا یه ماتریس 256 در 8 داریم، یعنی هر ستون این ماتریس معادل یه بیت از تمام عددهامون هست. اینکه دو بیت کنار هم رو می خوایم ببینیم یک هست یا نه، هر بیتی رو در کناریش ضرب می کنیم، هفت بیت اول Bin_A(:,1:7) رو در هفت بیت دوم Bin_A(:,2:8) ضرب کردیم. اگه هر دو یک باشن یک میشه ضربشون دیگه، درسته. پس توی هر سطر ما هفت ستون داریم که نتیجه ی ضرب هر بیت در بیت کناریش هست. از بین این هفتا یه دونه هم یک باشه کافیه، پس میگیم توی هر سری اگه یه یک بود، ما اون عدد رو نمی خوایم، نتیجه صفر باشه. متلب یه فانکشن به نام any داره، اگه یه مقدار غیر یک داشته باشه خروجی یک هست، حالا ما هم اینجا ازش استفاده می کنیم. برای هر سط اگه یه یک داشته باشیم any به ما یک میده، خب ما اینا رو که نمی خوایم، اونایی که یک ندارن رو می خوایم، پس notش می کنیم (~). دیگه می خواستیم چی رو چک کنیم، بیت اول و بیت آخر، اینم برای کل اعداد چک می کنیم (من چرا نوشتم صفر نباشه، می تونستم همون یک باشه رو بنویسم)، در نهایت خروجی مون هم باید هم ویژگی idx1 رو داشته باشه و هم ویژگی idx2، اینا رو با هم and می کنیم. میشه ایندکس عدد هایی که می خوایم. 6 لینک به دیدگاه
فاطمه-زهرا 164 مالک اشتراک گذاری ارسال شده در 13 مرداد، ۱۳۹۳ توضیحتون عالی بود دوباره سعی میکنم شاید موفق شدم خیلی خیلی ممنون 5 لینک به دیدگاه
فاطمه-زهرا 164 مالک اشتراک گذاری ارسال شده در 16 مرداد، ۱۳۹۳ مجددا سلام من دو روزه درگیر اینم که برای اعداد اعشاری چکار کنم آقای انصاری تو یکی از پستاشون اینو جواب داده بودن اما خروجی این کد کاراکتر هست و نمیتونه ورودی کد بالا باشه برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 5 لینک به دیدگاه
Imaaan 17059 اشتراک گذاری ارسال شده در 17 مرداد، ۱۳۹۳ مجددا سلاممن دو روزه درگیر اینم که برای اعداد اعشاری چکار کنم آقای انصاری تو یکی از پستاشون اینو جواب داده بودن اما خروجی این کد کاراکتر هست و نمیتونه ورودی کد بالا باشه برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام سلام خب این کد باینری رو برای اعداد اعشاری حساب می کنه، علامت مثبت و منفی یا علامت ممیز رو که نیاز ندارین. نمی دونم درسته با نه، ولی میشه توی یه عدد بزرگی ضرب کرد، بعد باینرشون رو حساب کرد، یه چنین چیزی مثلا: برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام شما چجوری می خواین عدد ها به باینری تبدیل بشن؟ 5 لینک به دیدگاه
فاطمه-زهرا 164 مالک اشتراک گذاری ارسال شده در 18 مرداد، ۱۳۹۳ سلامخب این کد باینری رو برای اعداد اعشاری حساب می کنه، علامت مثبت و منفی یا علامت ممیز رو که نیاز ندارین. نمی دونم درسته با نه، ولی میشه توی یه عدد بزرگی ضرب کرد، بعد باینرشون رو حساب کرد، یه چنین چیزی مثلا: برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام شما چجوری می خواین عدد ها به باینری تبدیل بشن؟ برام فرق نمیکنه چجوری باشه. فقط تو مقاله نوشته اعداد باید باینری باشن این کدی که گذاشتید خروجیش صفره 5 لینک به دیدگاه
Imaaan 17059 اشتراک گذاری ارسال شده در 18 مرداد، ۱۳۹۳ برام فرق نمیکنه چجوری باشه. فقط تو مقاله نوشته اعداد باید باینری باشناین کدی که گذاشتید خروجیش صفره خب اینا عدد اعشاری هست، نگفته به چه صورت به باینری تبدیل کنین؟ به خاطر این صفر میده، چون فکر کنم تعداد بیت ها رو زیاد گرفتم، بیت با ارزش صفر بشه. گفتم نمی دونم این روشی که میگم درسته یا نه. این معادل باینری به نظر خودتون باید چجوری باشه؟ 5 لینک به دیدگاه
فاطمه-زهرا 164 مالک اشتراک گذاری ارسال شده در 18 مرداد، ۱۳۹۳ خیلی سرچ کردم ولی چیزی پیدا نکردم 3 خط اول قسمت 2.1.1 مقاله در این رابطه صحبت کرده ولی مطلب خاصی نگفته! برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 5 لینک به دیدگاه
فاطمه-زهرا 164 مالک اشتراک گذاری ارسال شده در 7 شهریور، ۱۳۹۳ سلام عید همه مبارک باشه ان شاءالله میخوام مدل کار رو تغییر بدم. یه عدد باینری رندوم دارم مثلا به طول 100. می خوام ببینم از چند تا سکانس تشکیل شده. سکانس: قسمت هایی از عدد باینریمون که بیت اول و آخرشون 1 هست و هیچ دو بیت کنار همیشون 1 نیست. چکار کنم؟ برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 4 لینک به دیدگاه
Imaaan 17059 اشتراک گذاری ارسال شده در 8 شهریور، ۱۳۹۳ سلامعید همه مبارک باشه ان شاءالله میخوام مدل کار رو تغییر بدم. یه عدد باینری رندوم دارم مثلا به طول 100. می خوام ببینم از چند تا سکانس تشکیل شده. سکانس: قسمت هایی از عدد باینریمون که بیت اول و آخرشون 1 هست و هیچ دو بیت کنار همیشون 1 نیست. چکار کنم؟ برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام سلام نوشتن کدش سخت نیست. این عدد باینری رو از همون اعداد اعشاری تون تولید می کنین، حواستون به دقت ممیز شناور که توی محاسبات متلب ازش استفاده می کنه هست، همین فرمت double رو میگم، حدود 16 یا 17 تا از ارقام با ارزش عدد معتبر هستن و رقم های بعد اون رقم های اصلی عددتون نیستن. بیشتر منظورم اینه اگه در عددی ضرب می کنین، اینا رو در نظر بگیرین که عدداتون اشتباه نشن. این کد کاری که می خواین رو انجام میده، میاد طول هر کدوم از این سکانس هاتون رو حساب می کنه، بعد این ماتریس طول رو به mat2cell میده تا هر سکانسی رو داخل یکی از cell ها قرار بده: برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 3 لینک به دیدگاه
فاطمه-زهرا 164 مالک اشتراک گذاری ارسال شده در 9 شهریور، ۱۳۹۳ سلام متشکرم آقا ایمان متاسفانه این کد، خروجی مورد نظر رو نمیده! من یه کد دیگه نوشتم به نظرم منطقش صحیحه ولی خطا میده!!! برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 2 لینک به دیدگاه
فاطمه-زهرا 164 مالک اشتراک گذاری ارسال شده در 9 شهریور، ۱۳۹۳ بذارید یک مثال بزنم. مثلا این کروموزوم رو داریم: 000110001010011100010000 سکانس ها: سه تا صفر اول رو رد میکنیم تا به اولین 1 برسیم چون قراره ابتدا و انتهای هر سکانس، 1 باشه. اولین 1 رو که دیدیم چک میکنیم که عدد بعدیش 1 هست یا نه، اگر 1 بود باز میریم بیت بعدی چون دو تا 1 کنار هم نباید باشه. پس میرسیم به بیت پنجم که 1 هست و بیت بعدش هم صفره، حالا اینقدر جلو میریم که به اولین 1 بعدی برسیم. اولین سکانس میشه: 10001 سکانس های بعدی: 1001 10001 اون سه صفر آخر هم که بی استفاده میشن. 2 لینک به دیدگاه
Imaaan 17059 اشتراک گذاری ارسال شده در 9 شهریور، ۱۳۹۳ سلام متشکرم آقا ایمان متاسفانه این کد، خروجی مورد نظر رو نمیده! من یه کد دیگه نوشتم به نظرم منطقش صحیحه ولی خطا میده!!! برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام بذارید یک مثال بزنم. مثلا این کروموزوم رو داریم: 000110001010011100010000 سکانس ها: سه تا صفر اول رو رد میکنیم تا به اولین 1 برسیم چون قراره ابتدا و انتهای هر سکانس، 1 باشه. اولین 1 رو که دیدیم چک میکنیم که عدد بعدیش 1 هست یا نه، اگر 1 بود باز میریم بیت بعدی چون دو تا 1 کنار هم نباید باشه. پس میرسیم به بیت پنجم که 1 هست و بیت بعدش هم صفره، حالا اینقدر جلو میریم که به اولین 1 بعدی برسیم. اولین سکانس میشه: 10001 سکانس های بعدی: 1001 10001 اون سه صفر آخر هم که بی استفاده میشن. سلام ببخشید، درسته من اصلا حواسم به قسمت اولش نبود. کدی که خودتون نوشتین، متغیر j رو که تعریف نکردین، chromosome یه جا با c رو کوچیک نوشتین. این واسه ارورش، ولی for اینجا جواب نمیده، باید while استفاده کنین. اگه string هم هست فکر کنم می تونین از regexp هم استفاده کنین، جالب تر میشه. فکر کنم این دیگه درست باشه: برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 2 لینک به دیدگاه
فاطمه-زهرا 164 مالک اشتراک گذاری ارسال شده در 9 شهریور، ۱۳۹۳ متشکرم بله متوجه خطاش شدم ولی خروجی کد من هم مثل مال شماست مثلا تو این کروموزوم: 1001001100 سکانس ها رو به این صورت داریم: 1001000100 در حالی که وقتی به بیت پنجم میرسیم، صفره، یعنی هنوز سکانس جدید شروع نشده و کلا تا آخرش دیگه همین یه سکانس رو داریم این کد من هم همین خطا رو داره. اونم به این دلیله که تو دستورا میگم اگه 2تا 1 کنار هم بودن، یکی به i اضافه کن و چون آرایه م یه ماتریس zero هست وقتی i یکی میره جلو، به جاش صفر میاد. در حالی که اگه وقتی اولین بیت سکانس بود و دو تا 1 کنار هم بودند، باید اولی رو صفر کنیم و دومی رو در نظر بگیریم اما وقتی به انتهای هر سکانس میرسیم، اگه دو تا 1 کنار هم بودن، باید برعکس باشه یعنب اولی 1 و دومی صفر بشه برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 3 لینک به دیدگاه
Imaaan 17059 اشتراک گذاری ارسال شده در 9 شهریور، ۱۳۹۳ متشکرم بله متوجه خطاش شدم ولی خروجی کد من هم مثل مال شماست مثلا تو این کروموزوم: 1001001100 سکانس ها رو به این صورت داریم: 1001000100 در حالی که وقتی به بیت پنجم میرسیم، صفره، یعنی هنوز سکانس جدید شروع نشده و کلا تا آخرش دیگه همین یه سکانس رو داریم این کد من هم همین خطا رو داره. اونم به این دلیله که تو دستورا میگم اگه 2تا 1 کنار هم بودن، یکی به i اضافه کن و چون آرایه م یه ماتریس zero هست وقتی i یکی میره جلو، به جاش صفر میاد. در حالی که اگه وقتی اولین بیت سکانس بود و دو تا 1 کنار هم بودند، باید اولی رو صفر کنیم و دومی رو در نظر بگیریم اما وقتی به انتهای هر سکانس میرسیم، اگه دو تا 1 کنار هم بودن، باید برعکس باشه یعنب اولی 1 و دومی صفر بشه واسه من همون یه دونه رو میده دیگه: برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام اینم خروجیش: برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 4 لینک به دیدگاه
فاطمه-زهرا 164 مالک اشتراک گذاری ارسال شده در 10 شهریور، ۱۳۹۳ بله جواب درسته خیلی خیلی متشکرم 3 لینک به دیدگاه
فاطمه-زهرا 164 مالک اشتراک گذاری ارسال شده در 10 شهریور، ۱۳۹۳ سوال بعد: الان میخوام یه structure تولید کنم که یک قسمت position و یک cost داشته باشه. بعد این سکانس ها رو بریزم توی قسمت position ساختار. در آخر هم cost سگمنت رو (مجموعه سکانس های یک کروموزوم) محاسبه کنم. empty_individual{nSequence,1}.Position=[] empty_individual{nSequence,1}.Cost=[] وقتی اینطوری تعریف میکنم، میگه Cell contents assignment to a non-cell array object 2 لینک به دیدگاه
Imaaan 17059 اشتراک گذاری ارسال شده در 10 شهریور، ۱۳۹۳ سوال بعد: الان میخوام یه structure تولید کنم که یک قسمت position و یک cost داشته باشه. بعد این سکانس ها رو بریزم توی قسمت position ساختار. در آخر هم cost سگمنت رو (مجموعه سکانس های یک کروموزوم) محاسبه کنم. empty_individual{nSequence,1}.Position=[] empty_individual{nSequence,1}.Cost=[] وقتی اینطوری تعریف میکنم، میگه Cell contents assignment to a non-cell array object واسه متغیرهای نوع struct که نمی تونین به صورت cell آدرس دهی کنین، موقعی که آخرین عدد یک بود ارور میداد: برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 2 لینک به دیدگاه
فاطمه-زهرا 164 مالک اشتراک گذاری ارسال شده در 11 شهریور، ۱۳۹۳ باز هم مشکل میخوام خروجی حلقه قبل رو با k-means کلاستر کنم. باید سکانس های هر کروموزوم یا pop جداگانه کلاستر بشه. چون خروجی از نوع structure هست، k-means قبولش نمیکنه. بنابراین اول به سلول تبدیلش کردم و بعد به ماتریس که مشکلی پیش نیاد ولی خطا میده! میگه تغییر نوع ممکن نیست! برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام 1 لینک به دیدگاه
ارسال های توصیه شده