में वैक्टरों की एक सरणी का वेक्टर मानदंड MATLAB में मैट्रिक्स पर norm
पर कॉल करते समय, यह वेक्टर मानदंडों की एक सरणी के बजाय "मैट्रिक्स मानदंड" (स्केलर मान) के रूप में जाना जाता है। क्या मैट्रिक्स में प्रत्येक वेक्टर के मानक को लूपिंग और MATLAB के वेक्टरेशन का लाभ उठाने के बिना कोई तरीका प्राप्त करने का कोई तरीका है?MATLAB
MATLAB
उत्तर
आप element-wise arithmetic operators का उपयोग करके मैट्रिक्स के प्रत्येक कॉलम या पंक्ति के मानदंड की गणना कर सकते हैं और दिए गए मैट्रिक्स आयामों (जैसे SUM और MAX) पर संचालित करने के लिए परिभाषित फ़ंक्शंस का उपयोग कर सकते हैं। यहाँ कैसे आप एक मैट्रिक्स M
के लिए कुछ स्तंभ-वार मानदंडों की गणना कर सकते हैं:
twoNorm = sqrt(sum(abs(M).^2,1)); %# The two-norm of each column
pNorm = sum(abs(M).^p,1).^(1/p); %# The p-norm of each column (define p first)
infNorm = max(M,[],1); %# The infinity norm (max value) of each column
इन मानदंडों आसानी से ...,1
से ...,2
के आयाम तर्क बदलकर स्तंभों के बजाय पंक्तियों पर संचालित करने के लिए बनाया जा सकता है।
शायद आपको स्पष्ट रूप से उन आयामों को निर्दिष्ट करना चाहिए जिनके साथ एसयूएम और MAX संचालित होते हैं, इस तरह पंक्ति-वार मानदंडों पर स्विच करना आसान होगा ... – Amro
@Amro: अच्छा सुझाव। किया हुआ! – gnovice
यदि 'एम' में केवल वास्तविक संख्याएं हैं, तो आप 'दो' नाम में 'एम' के साथ' abs '(')' को प्रतिस्थापित कर सकते हैं क्योंकि'।^2 प्रभावी रूप से किसी नकारात्मक संकेत को रद्द कर देता है। – kroimon
दो-मानक के लिए मौजूदा कार्यान्वयन में सुधार किया जा सकता है।
twoNorm = sqrt(sum(abs(M).^2,1)); # The two-norm of each column
abs(M).^2
अनावश्यक वर्ग जड़ों जो सिर्फ वर्ग सीधे प्राप्त की एक पूरी गुच्छा की गणना होने जा रही है।
सुदूर बेहतर करने के लिए:
twoNorm = sqrt(
sum(real(M .* conj(M)), 1)
)
यह कुशलता से संभालती है वास्तविक और जटिल एम
का उपयोग real()
सुनिश्चित करता है कि sum
और वास्तविक संख्या से अधिक sqrt
अधिनियम (0 काल्पनिक घटक के साथ के बजाय जटिल संख्या)।
संस्करण 2017 बी के बाद से, आप vecnorm का उपयोग कर सकते हैं।
योग के बारे में क्या? –