खोज…


परिचय

accumarray विभिन्न तरीकों से एक सरणी के आइटम को एकत्रित करने की अनुमति देता है, संभवतः प्रक्रिया में कुछ फ़ंक्शन को लागू करता है। accumarray सोचा जा सकता है की एक हल्के रूप में कम करने (यह भी देखें: MapReduce का परिचय )।

इस विषय में सामान्य परिदृश्य शामिल होंगे जहाँ accumarray विशेष रूप से उपयोगी है।

वाक्य - विन्यास

  • accumarray (सबस्क्रिप्टअरे, मानअरे)
  • accumarray (subscriptArray, valuesArray, sizeOfOutput)
  • accumarray (सबस्क्रिप्टअरे, मानअवर, sizeOfOutput, funcHandle)
  • accumarray (सबस्क्रिप्टअरे, मानअअर, आकारऑउटपुट, फंकहैंडल, फिलवैल)
  • accumarray (सबस्क्रिप्टअरे, मानअवर, sizeOfOutput, funcHandle, fillVal, isSparse)

पैरामीटर

पैरामीटर विवरण
subscriptArray सदस्यता मैट्रिक्स, सूचकांक के वेक्टर के रूप में निर्दिष्ट, सूचकांक के मैट्रिक्स, या सूचकांक वैक्टर के सेल सरणी।
valuesArray डेटा, एक वेक्टर या एक स्केलर के रूप में निर्दिष्ट।
sizeOfOutput सकारात्मक पूर्णांक के वेक्टर के रूप में निर्दिष्ट आउटपुट सरणी का आकार।
funcHandle फ़ंक्शन हैंडल या [] रूप में निर्दिष्ट, एकत्रीकरण के दौरान प्रत्येक सेट पर लागू होने वाला कार्य।
fillVal मान भरें, जब subs -आउटपुट में प्रत्येक तत्व का संदर्भ न हो।
isSparse आउटपुट एक विरल सरणी होना चाहिए?

टिप्पणियों

  • MATLAB v7.0 में प्रस्तुत किया गया।

संदर्भ :

  1. लॉरेन श्योर द्वारा "अंडर- accumarray ", 20 फरवरी, 2008
  2. आधिकारिक MATLAB प्रलेखन में accumarray

किसी अन्य वेक्टर द्वारा समूहीकृत तत्वों के बीच अधिकतम मूल्य का पता लगाना

यह एक आधिकारिक MATLAB उदाहरण है

निम्नलिखित कोड पर विचार करें:

month = [1;1;2;3;8;1;3;4;9;11;9;12;3;4;11];
temperature = [57;61;60;62;45;59;64;66;40;56;38;65;61;64;55];
maxTemp = accumarray(month,temperature,[],@max);

नीचे दी गई छवि इस मामले में accumarray द्वारा की गई गणना प्रक्रिया को प्रदर्शित करती है:

अभिकलन प्रक्रिया की व्याख्या

इस उदाहरण में, समान month सभी मान पहले एकत्रित किए जाते हैं, और फिर 4 वें इनपुट द्वारा accumarray (इस मामले में, @max ) पर निर्दिष्ट फ़ंक्शन को ऐसे प्रत्येक सेट पर लागू किया जाता है।

फ़िल्टर को छवि पैच पर लागू करें और प्रत्येक पिक्सेल को प्रत्येक पैच के परिणाम के माध्यम के रूप में सेट करें

कई आधुनिक इमेज प्रोसेसिंग एल्गोरिदम पैच का उपयोग करते हैं, जो उनके मूल तत्व हैं।
उदाहरण के लिए, कोई पैच को अस्वीकार कर सकता है (BM3D एल्गोरिथम देखें)।

फिर भी जब छवि का निर्माण होता है तो संसाधित पैच बनते हैं हमारे पास एक ही पिक्सेल के लिए कई परिणाम होते हैं।
इससे निपटने का एक तरीका एक ही पिक्सेल के सभी मूल्यों का औसत (एम्पिरिकल मीन) है।

निम्न कोड दिखाता है कि एक छवि को पैच में कैसे तोड़ना है और वे पैच को [accumarray()][1] का उपयोग करके औसत से छवि का पुनर्निर्माण करते हैं:

numRows = 5;
numCols = 5;

numRowsPatch = 3;
numColsPatch = 3;

% The Image
mI = rand([numRows, numCols]);

% Decomposing into Patches - Each pixel is part of many patches (Neglecting
% boundariwes, each pixel is part of (numRowsPatch * numColsPatch) patches).
mY = ImageToColumnsSliding(mI, [numRowsPatch, numColsPatch]);

% Here one would apply some operation which work on patches

% Creating image of the index of each pixel
mPxIdx = reshape(1:(numRows * numCols), [numRows, numCols]);

% Creating patches of the same indices
mSubsAccu = ImageToColumnsSliding(mPxIdx, [numRowsPatch, numColsPatch]);

% Reconstruct the image - Option A
mO = accumarray(mSubsAccu(:), mY(:)) ./ accumarray(mSubsAccu(:), 1);

% Reconstruct the image - Option B
mO = accumarray(mSubsAccu, mY(:), [(numRows * numCols), 1], @(x) mean(x));

% Rehsape the Vector into the Image
mO = reshape(mO, [numRows, numCols]);


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow