न्यू जवाब:
आप DEC2BIN समाधान suggested by AB बजाय BITGET फ़ंक्शन का उपयोग करके (एक woodchips द्वारा सहायता के साथ) में तेजी लाने के कर सकते हैं। इस दृष्टिकोण के दो तरीके हैं। पहले आदानों आकार में बराबर (32-से-5 मैट्रिक्स) बनाने के लिए REPMAT फ़ंक्शन का उपयोग करता:
allCombos = bitget(repmat((0:31)',1,5),repmat(5:-1:1,32,1));
और दूसरा केवल कॉल BITGET एक बार हर व्यक्ति बिट के लिए आप प्राप्त करना चाहते हैं:
vec = (0:31)';
allCombos = [bitget(vec,5) bitget(vec,4) bitget(vec,3) ...
bitget(vec,2) bitget(vec,1)];
Method | Average Time
-----------------+------------------
DEC2BIN | 0.000788 s
BITGET+REPMAT | 0.000727 s
BITGET x5 | 0.000045 s
आप देख सकते हैं, unrolled BITGET बहुत तेजी से है:
और यहाँ कुछ नमूना समय कर रहे हैं।
पुराना जवाब: एक ही रास्ता (भावी पीढ़ी के लिए)
आप शून्य और लोगों की हर संभव वेक्टर 5 की लंबाई है कि के एक मैट्रिक्स का निर्माण करने के लिए इच्छुक है, तो यह हो सकता है कार्यों PERMS और UNIQUE का उपयोग कर यह करने के लिए (PERMS के बाद से दोहराया पंक्तियों बनाता है):
allCombos = [0 0 0 0 0;
unique(perms([0 0 0 0 1]),'rows'); ...
unique(perms([0 0 0 1 1]),'rows'); ...
unique(perms([0 0 1 1 1]),'rows'); ...
unique(perms([0 1 1 1 1]),'rows'); ...
1 1 1 1 1];
धन्यवाद! मुझे लगता है कि यह वही है जो मुझे चाहिए। –
@ किरण: ध्यान रखें कि आपको पहले से शुरू करने के लिए 5-तत्व वेक्टर और शून्य का चयन करना होगा, फिर PERMS आपको इसके हर क्रमपरिवर्तन देगा। – gnovice
टिप, gnovice के लिए धन्यवाद। यह मेरे कोड को पहले बहुत तेज बनाता है और यह वास्तव में अच्छा है। –