मुझे आबादी में गैमेट की आवृत्तियों की गणना को अनुकूलित करने की आवश्यकता है।आबादी में गैमेट की आवृत्तियों की गणना को अनुकूलित करना
मेरे पास प्रत्येक जनसंख्या में np
आबादी और Ne
व्यक्ति हैं। प्रत्येक व्यक्ति दो गैमेट (नर और मादा) द्वारा गठित होता है। प्रत्येक गैमेटे में तीन जीन होते हैं। प्रत्येक जीन 0
या 1
हो सकती है। तो प्रत्येक व्यक्ति एक 2x3 मैट्रिक्स है। मैट्रिक्स की प्रत्येक पंक्ति माता-पिता में से एक द्वारा दी गई गामेट है। प्रत्येक आबादी में व्यक्तियों का सेट मनमाना हो सकता है (लेकिन हमेशा Ne
लंबाई)।
Ne = 300; np = 3^7;
(*This table may be arbitrary with the same shape*)
ind = Table[{{0, 0, 0}, {1, 1, 1}}, {np}, {Ne}]
सभी संभव युग्मकों का पूर्ण सेट:
allGam = Tuples[{0, 1}, 3]
प्रत्येक व्यक्ति समान प्रायिकता के साथ 8 संभव तरीके से एक gamete उत्पन्न कर सकते हैं सरलता के लिए व्यक्तियों के साथ प्रारंभिक आबादी के रूप में दिया जा सकता है। ये गैमेट हैं: [email protected]@ind[[iPop, iInd]]
(जहां iPop
और iInd
- आबादी की अनुक्रमणिका और उस आबादी में व्यक्तिगत)। मुझे प्रत्येक आबादी के लिए व्यक्तियों द्वारा उत्पन्न गैमेट की आवृत्तियों की गणना करने की आवश्यकता है।
इस समय मेरा समाधान निम्नानुसार है।
सबसे पहले, मैं युग्मक में प्रत्येक व्यक्ति के धर्मांतरण यह कर सकते हैं उत्पादन:
gamsInPop = Map[Sequence @@ [email protected]@# &, ind, {2}]
लेकिन अधिक कुशल तरीका यह करने के लिए है:
gamsInPop =
Table[Join @@ Table[[email protected]@ind[[i, j]], {j, 1, Ne}], {i, 1, np}]
दूसरे, मैं सहित उत्पादित युग्मक की आवृत्तियों की गणना गैमेट्स के लिए शून्य आवृत्तियों जो संभव हैं लेकिन जनसंख्या में अनुपस्थित हैं:
gamFrq = Table[Count[pop, gam]/(8 Ne), {pop, gamInPop}, {gam, allGam}]
इस कोड का अधिक कुशल संस्करण:
gamFrq = Total[
Developer`ToPackedArray[
gamInPop /. Table[
allGam[[i]] -> Insert[{0, 0, 0, 0, 0, 0, 0}, 1, i], {i, 1,
8}]], {2}]/(8 Ne)
दुर्भाग्यवश, कोड अभी भी बहुत धीमा है। क्या कोई मुझे गति देने में मदद कर सकता है?
मैंने संयोजक टैग जोड़ा; मुझे लगता है कि यह मदद करेगा। मेरे पास अभी इस के लिए समय नहीं है। –