matlab多个长度为3的数组,个数不确定,怎么从每一个数组中取一个数字,得到全排列 matlab 编程 列举从a数组集合中选出m个数组进行全排列...
\u5982\u4f55\u5229\u7528matlab\u628a\u591a\u7ec4\u5411\u91cf\u6392\u5217\u7ec4\u5408\u3002\u751f\u6210\u5168\u6392\u5217\u53ef\u4ee5\u7528perms\u51fd\u6570\uff0c\u628a\u5404\u5411\u91cf\u653e\u5728\u5143\u80de\u6570\u7ec4\u4e2d\uff0c\u7136\u540e\u6309\u7167\u5168\u6392\u5217\u6765\u7ec4\u5408\u5373\u53ef\uff1a
M = {[1 2 3]; [4 5 6]; [7 8 9]};
I=perms(1:3);
C=mat2cell(I,ones(6,1),3);
R=cellfun(@(ii)[M{ii}],C,'UniformOutput',false)
\u8fd9\u6837\u5f97\u5230\u7684\u7ed3\u679cR\u662f\u4e00\u4e2a\u5143\u80de\u6570\u7ec4\uff0c\u5176\u6bcf\u4e2a\u5143\u7d20\u5206\u522b\u662f\u4e00\u4e2a\u7ec4\u5408\u51fa\u6765\u7684\u5411\u91cf\u3002
>> cellfun(@(c)fprintf('%s\n',mat2str(c)),R)
[7 8 9 4 5 6 1 2 3]
[7 8 9 1 2 3 4 5 6]
[4 5 6 7 8 9 1 2 3]
[4 5 6 1 2 3 7 8 9]
[1 2 3 4 5 6 7 8 9]
[1 2 3 7 8 9 4 5 6]
cc = 2; % \u6bcf\u4e2a\u6570\u7ec4\u5217\u6570M = 4; % \u6570\u7ec4\u4e2a\u6570for k = 1:M rr = fix(4*rand)+1; % \u968f\u673a\u884c\u6570 a{k} = rand(rr,cc);end% \u524d\u9762\u662f\u751f\u6210\u5b9e\u9a8c\u6570\u636e\uff0c\u6709\u6570\u636e\u5c31\u4e0d\u7528\u4e86% \u6709\u6570\u636e a% M = size(a,1);m = 2; % m <= Mid = nchoosek(1:M,m);for k = 1:size(id,1) temp = []; for p = 1:m temp = [temp; a{id(k,p)}]; end R{k} = temp;end
这个不叫全排列吧,应该叫全组合。
编了个函数给你:
function C = allcombs(varargin)
n = nargin;
if n < 2, error('Insufficient input'); end
s = '[x1';
for i=2:n
s = [s sprintf(',x%i',i)];
end
s = [s ']=ndgrid(varargin{:});'];
eval(s);
s = '[x1(:)';
for i=2:n
s = [s sprintf(',x%i(:)',i)];
end
s = [s ']'];
C = eval(s);
调用示例:
a = [1 2];
b = [3 4 5];
c = [6 7];
C = allcombs(a,b,c)
运行结果
C =
1 3 6
2 3 6
1 4 6
2 4 6
1 5 6
2 5 6
1 3 7
2 3 7
1 4 7
2 4 7
1 5 7
2 5 7
首先是提取放到一个数组里。这可以用eval函数+对应命名的表示式实现。然后再计算全排列。
绛旓細C = 1 3 6 2 3 6 1 4 6 2 4 6 1 5 6 2 5 6 1 3 7 2 3 7 1 4 7 2 4 7 1 5 7 2 5 7
绛旓細浣跨敤Cat鍛戒护鏉ュ垱寤洪珮缁存暟缁勩侰at鍛戒护鐨勪釜浜嬩负銆怌=cat锛坉im,A1,A2,A3,A4鈥︹︼級銆戝叾涓璬im琛ㄧず鐨鏄鍒涘缓鏁扮粍鐨勭淮搴︼紝A1,A2,A3,A4琛ㄧず鐨勬槸鍚勭淮搴︿笂鐨勬暟缁銆傚湪鍛戒护绐楀彛涓緭鍏ヤ互涓嬩唬鐮佸嵆鍙垱寤轰竴涓畝鍗曠殑涓夌淮鏁扮粍锛 D2=[1,2,3;4,5,6;7,8,9]; C=cat(3,D2,2*D2,3*D2);瑕佹煡鐪嬬▼搴忕粨鏋 杈...
绛旓細1銆佹墦寮matlab锛屽湪鍛戒护琛岀獥鍙h緭鍏eros(2,3)锛屽涓嬪浘鎵绀恒2銆佹寜鍥炶溅閿箣鍚庯紝鍙互鐪嬪埌鍒涘缓浜嗕竴涓2琛3鍒楃殑浜岀淮鏁扮粍銆3銆佸湪鍛戒护琛岀獥鍙h緭鍏nes(3,4)锛屽涓嬪浘鎵绀恒4銆佹寜鍥炶溅閿箣鍚庯紝鍙互鐪嬪埌鍒涘缓涓涓3琛4鍒鐨勬暟缁锛屽涓嬪浘鎵绀恒5銆亃eros鍑芥暟鍒涘缓涓瀹氬ぇ灏忕殑鍏0鏁扮粍锛宱nes鍑芥暟鍒涘缓涓瀹氬ぇ灏忕殑鍏1鏁扮粍...
绛旓細涓锛欰=zeros(3,4,3);B(3,4,3)=0;C(:,:,1)=rand(3,4);C(:,:,2)=rand(3,4);C(:,:,3)=rand(3,4);浜岋細A=magic(6)A([2,3],[4,5])=rand(2)=== A=[0,1,0,0,0;1,0,0,0,0;0,0,1,0,0;0,0,0,1,0 ];A([2,3],[4,5])=[1,2;3,4]
绛旓細鍦matlab涓锛屼簩缁鏁扮粍鍙互鐪嬩綔2涓竴缁存暟缁勶紝姣斿瑕佽緭鍏ヤ簩缁存暟缁 a = {{1,2,3},{4,5,6},{7,8,9}} 锛屽湪command window(鍛戒护绐楀彛锛夊涓嬫墍绀鸿緭鍏ュ嵆鍙細>> a = [1,2,3;4,5,6;7,8,9]鍙互鐪嬪埌锛岃緭鍏ュ悗command window浼氳緭鍑鸿浜岀淮鏁扮粍锛堢煩闃碉級锛屽涓嬪浘鎵绀猴紙绾㈣壊绠ご鍗充负杈撳嚭鐭╅樀锛夈傚叾瀹...
绛旓細1銆侀鍏堟墦寮matlab锛屽湪鍛戒护琛岀獥鍙d腑杈撳叆help reshape锛屽reshape鏈変竴涓璇嗭紝濡備笅鍥炬墍绀恒2銆佽繖鏃惰緭鍏eshape([1:18],[3 3 2])锛屽涓嬪浘鎵绀恒3銆乺eshape([1:18],[3 3 2])涓殑[1:18]鎰忔濇槸鏁扮粍1--18锛屽悗杈筟3 3 2]鎰忔濇槸灏嗘暟缁勫垎涓3琛屻3鍒椼2椤点4銆佹渶鍚庢煡鐪嬩簩缁存暟缁:[9 8 7 1...
绛旓細matlab涓涓夌淮鏁扮粍鐨勭敓鎴愭柟寮忚窡浜岀淮鏁扮粍宸笉澶氾紝鍙笉杩囧浜嗕竴涓弬鏁拌屽凡銆備笅闈㈤氳繃涓句緥鏉ュ叿浣撹鏄庡浣曚骇鐢熷強浣跨敤涓夌淮鏁扮粍銆侫 = zeros(2, 2, 3); % 鐢熸垚涓涓2*2*3鐨涓夌淮鏁扮粍 鏄剧ず鍑烘潵鐨勭粨鏋勫涓嬶細A(:, :, 1)= % 涓涓2*2鐨勪簩缁存暟缁 0 0 0 0 A(:, :, 2)= % 涓涓2*2鐨勪簩缁...
绛旓細绛旀锛MATLAB涓殑鏁扮粍鏄涓绉嶇敤浜庡瓨鍌ㄦ暟鍊兼暟鎹殑閲嶈缁撴瀯銆傚畠浠彲浠ユ槸涓缁寸殑鍚戦噺锛屼篃鍙互鏄簩缁寸殑鐭╅樀锛岀敋鑷虫洿楂樼淮搴︾殑鏁扮粍銆傚湪MATLAB涓紝鍒涘缓鍜屾搷浣滄暟缁勯潪甯哥洿瑙備笖楂樻晥銆傝缁嗚В閲婏細1. MATLAB鏁扮粍鐨勫熀鏈蹇碉細MATLAB涓殑鏁扮粍鏄竴绉嶈兘澶熷瓨鍌澶氫釜鏁版嵁鍊肩殑鏁版嵁缁撴瀯銆傝繖浜涘煎彲浠ユ槸鏁板笺佸瓧绗︽垨甯冨皵鍊肩瓑銆傛暟缁勫厑璁...
绛旓細鍋囧浣鐨勬暟缁鏀惧湪浜嗕竴涓猟ata.txt璁颁簨鏈噷闈紝姣忎竴涓竴缁存暟缁勯兘鏄浠ュ垪瀛樺偍鐨勩傞偅涔堝彲浠ヨ繖涔堝啓锛欰=load('data.txt'); %杞藉叆鏁版嵁 B=2*A+A.^2; %瀵逛簬A閲岄潰鐨勬暟鎹紝姣忎竴涓厓绱犻兘鍋氱浉鍚岀殑杩愮畻锛2*x+x^2 娉細寰楀埌鐨凚鐨勬瘡涓鍒楀氨鏄綘瑕佺殑ri锛宨=1锛2锛屻傘傘
绛旓細濡傛灉鍚勪釜鏁扮粍鐨勯暱搴涓鏍凤紝鍙互鐩存帴鐢ㄧ煩闃电殑姣忎竴鍒楁垨姣忎竴琛屼唬琛ㄤ竴涓暟缁勩傚鏋滃悇涓鏁扮粍闀垮害涓嶄竴鏍凤紝鍙互鐢ㄧ粏鑳炵被鍨嬪瓨鍌紝姣忎釜缁嗚優鍏冨氨鏄涓涓暟缁勩傛瘮濡侫{1}=[1,2,3,4];A{2}=[5,6,7];