मेरे पास 40x16 मैट्रिक्स है या 8 5x16 नीचे हैअन्य अर्थात् लंबवत संरेखित करें। मैं इसमें से 5x128 मैट्रिक्स प्राप्त करना चाहता हूं, जैसे कि मैंने 8 5x16 मैट्रिसेस को क्षैतिज रूप से संरेखित किया है। क्या ऐसा करने के लिए एक कुशल / तेज (छोरों के लिए हार्डकोड के बजाय) है?
मैं व्यक्तिगत 5x16 मैट्रिसेस को बरकरार रखना चाहता हूं।
उत्तर:
उत्तर № 1 के लिए 1यह काम करना चाहिए। मान लीजिए कि आपका मैट्रिक्स है A
(40x16)।
यहाँ एक तरह से प्रयोग है reshape
:
m = 5; n = 8; p = 16;
B = reshape(permute(reshape(A", p, m, n), [2 1 3]), m, n*p);
बी में आपके आठ 5x16 मैट्रिस एक दूसरे के बगल में होंगे, बरकरार।
और यहाँ एक तरीका है बिना reshape
:
m = 5; n = 8;
B = cell2mat(arrayfun(@(i) A(m*(i-1)+1:m*i, :), 1:n, "UniformOutput", false));
जवाब के लिए 0 № 2
का उपयोग करने पर विचार reshape
समारोह: डॉक @ mathworks.
जवाब के लिए 0 № 3
आप बड़े मैट्रिक्स को छोटे लोगों में विभाजित करने के लिए MAT2CELL का उपयोग कर सकते हैं, फिर अपने इच्छित आयाम को जोड़ सकते हैं:
A = rand(8*5,16);
blkSz = 5;
C = mat2cell(A, blkSz*ones(1,size(A,1)/blkSz), size(A,2));
C = cat(2,C{:})
जवाब के लिए 0 № 4
3-by-4 मैट्रिक्स को 2-by-6 मैट्रिक्स में रीसेट करें। ए = १ ४ 7 १० २ ५ 8 ११ ३ ६ ९ १२
बी = रिशेप (ए, 2,6)
ब = १ ३ ५ 7 ९ ११ २ ४ ६ 8 १० १२ बी = रिशेप (ए, 2, [])
ब = १ ३ ५ 7 ९ ११ २ ४ ६ 8 १० १२