मैटलैब में, हम इस तरह एक सरणी के आयामों के बीच संक्षिप्त कर सकते हैं:आयामों के एक विशिष्ट सेट में सरणी को कैसे पतन करें?
M = rand(3,4,5);
myvec = M(:); % gives a 60-element vector
मुझे लगता है कि यह serialising बुलाया है या सपाट। तत्वों का क्रम पहले dim1 है, फिर dim2, फिर dim3 - तो आपको [M(1,1,1); M(2,1,1); M(3,1,1); M(1,2,1); ...]
मिलता है।
लेकिन मुझे क्या करना चाहते हैं पतन है सिर्फ पहले दो आयामों के साथ:
mymatrix = M(:: , :); % something that works like this?
एक 12 x 5 मैट्रिक्स देने के लिए। तो, उदाहरण के लिए, आप
[M(1,1,1) M(1,1,2) M(1,1,3) M(1,1,4) M(1,1,5)
M(2,1,1) M(2,1,2) M(2,1,3) M(2,1,4) M(2,1,5)
M(3,1,1) M(3,1,2) M(3,1,3) M(3,1,4) M(3,1,5)
M(1,2,1) M(1,2,2) M(1,2,3) M(1,2,4) M(1,2,5)
...
]
मिल ताकि mymatrix
के पहले आयाम "चपटा" 1 और मूल M
के 2 आयाम, लेकिन किसी भी अन्य आयामों संरक्षण है।
मुझे वास्तव में 5-आयामी सरणी के "मध्यम 3 आयामों" के लिए ऐसा करने की आवश्यकता है, इसलिए एक सामान्य समाधान बहुत अच्छा होगा! जैसे W=rand(N,N,N,N,N); mymatrix = W(:, :::, :)
को N x N^3 x N
मैट्रिक्स देना चाहिए यदि आप देखते हैं कि मेरा क्या मतलब है।
धन्यवाद
बिल्कुल सही धन्यवाद! Reshape के बारे में सोचना चाहिए था। पीएस मैंने बस काम करने के लिए एक और तरीका सोचा: 'tmp = permute (एम, [1,5,2,3,4]); ',' mymatrix = tmp (:, :)'। यकीन नहीं है कि यह हमेशा काम करेगा? बेशक 'reshape' ** ** ** ** बेहतर है। –