2016-10-30 13 views
9

पर मार्जिनलाइज मैं जूलिया में बहुआयामी सरणी को संभालने का तरीका जानने का प्रयास कर रहा हूं। मेरे पास एक बहुआयामी सरणी A = rand(5,5,5) है।एन आयामी सरणी

मैं यह पता लगाने की : की स्थिति एक इनपुट मीटर द्वारा दिए गए के साथ A[1,1,:] या A[1,:,1] या A[:,1,1] पाने के लिए कोशिश कर रहा हूँ।

मैं

indexData = [:,1,2] 
indexData[1],indexData[m] = indexData[m],indexData[1] 
data = A[indexData[1],indexData[2],indexData[3]] 

के साथ आए हैं, लेकिन यह बहुत ज्यादा जटिल लगता है और स्केल नहीं होता अगर A के आयाम अज्ञात थी। क्या इसे हल करने के कुछ बेहतर तरीके हैं?

+1

शीर्षक में मार्जिनलाइज कुछ आयाम (जैसे मामूली संभावना में) पर संक्षेप में सुझाव देता है। यदि विचार केवल तत्वों का चयन करना है, तो शायद शीर्षक भ्रमित है। –

+0

हां, अंत में मैं निर्दिष्ट आयामों पर हाशिए पर पहुंच जाएगा। हालांकि मैं logpdf से निपट रहा हूं इसलिए पीडीएफ पर सीधे योग नहीं कर सकता। यदि आपके पास शीर्षक के लिए एक बेहतर विचार है तो मैं खुशी से इसे बदल दूंगा। – drd13

उत्तर

8

निम्नलिखित बिल फिट हो सकता है:

getshaft(A,ii,m) = [A[(i==m?j:ii[i] for i=1:length(ii))...] for j=1:size(A,m)] 

निम्न उदाहरण पर विचार करें:

julia> A = reshape(collect(1:27),3,3,3) 
3×3×3 Array{Int64,3}: 
[:, :, 1] = 
1 4 7 
2 5 8 
3 6 9 

[:, :, 2] = 
10 13 16 
11 14 17 
12 15 18 

[:, :, 3] = 
19 22 25 
20 23 26 
21 24 27 

julia> getshaft(A,(1,2,3),1) 
3-element Array{Int64,1}: 
22 
23 
24 

दूसरा पैरामीटर एक तत्व सूचकांक है, और तीसरा एक आयाम चुनता है। getshaft तीसरे पैरामीटर द्वारा निर्दिष्ट आयाम के साथ दूसरे पैरामीटर द्वारा चुने गए तत्व सहित मानों के वेक्टर को वापस कर देगा। पहला पैरामीटर, ज़ाहिर है, सरणी।

getshaft(A,ii,m) = A[(i==m?Colon():ii[i] for i=1:length(ii))...] 

टुकड़ा अनुक्रमण का उपयोग करते हुए तेजी से सूचकांक गणना या अन्य AbstractArray से लाभ हो सकता:

--- अपडेट ---

एक संक्षिप्त समीक्षा से, एक भी तेजी से और एक ही समारोह के क्लीनर कार्यान्वयन का सुझाव दिया पृष्ठभूमि में जादूगर।

+0

धन्यवाद, वही है जो मुझे चाहिए! – drd13

+1

धन्यवाद, अगर कोई दिलचस्पी लेता है तो मैंने अंत में उपयोग किया है। 'गेटशाफ्ट (ए, ii, एम) = ए [(मैं एम में? कॉलन(): शिफ्ट! (ii) i = 1 के लिए: (लंबाई (ii) + लंबाई (एम))) ...]'। – drd13

संबंधित मुद्दे