mới trả lời:
Bạn có thể đẩy nhanh tiến độ giải pháp DEC2BINsuggested by AB (với sự trợ giúp của woodchips) bằng cách thay vì sử dụng các chức năng BITGET. Có hai cách để tiếp cận điều này. Là người đầu tiên sử dụng REPMAT chức năng để làm cho đầu vào tương đương về kích thước (cả 32-by-5 ma trận):
allCombos = bitget(repmat((0:31)',1,5),repmat(5:-1:1,32,1));
Và thứ hai chỉ đơn giản gọi BITGET một lần cho mỗi bit cá nhân bạn muốn nhận được:
vec = (0:31)';
allCombos = [bitget(vec,5) bitget(vec,4) bitget(vec,3) ...
bitget(vec,2) bitget(vec,1)];
Và đây là một số timings mẫu:
Method | Average Time
-----------------+------------------
DEC2BIN | 0.000788 s
BITGET+REPMAT | 0.000727 s
BITGET x5 | 0.000045 s
Như bạn có thể thấy, trải BITGET rất nhanh.
Cũ câu trả lời: (cho hậu thế)
Nếu bạn đang muốn xây dựng một ma trận của mỗi thể vector của zero và những người mà có chiều dài 5, đây sẽ là một trong những cách để làm điều đó bằng cách sử dụng chức năng PERMS và UNIQUE (kể từ PERMS tạo hàng lặp đi lặp lại):
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];
Cảm ơn! Tôi nghĩ rằng đây là chính xác những gì tôi cần. –
@Kiran: Hãy nhớ rằng trước tiên bạn phải chọn một vector gồm 5 phần tử của số nguyên tố và số 0 để bắt đầu, sau đó PERMS sẽ cung cấp cho bạn mọi hoán vị về điều đó. – gnovice
Cảm ơn lời khuyên, gnovice. Điều này làm cho mã của tôi nhanh hơn nhiều so với trước đó và điều đó thực sự tốt. –