2016-08-29 12 views
5

के साथ किसी सरणी के हिस्से को निकालने का तरीका मैं एक निर्दिष्ट आयाम के साथ सरणी के एक हिस्से को निकालने का तरीका (जूलिया में) को समझने की कोशिश कर रहा हूं, जब आयाम स्वयं एक चर है। यदि आयाम ज्ञात है तो यह सरणी के एक हिस्से को निकालने के लिए सीधा है।जूलिया: निर्दिष्ट आयाम

A = rand(27,33,11) 
A_portion = A[:,:,3:7] 

वहाँ एक चर आयाम में एक सरणी के एक हिस्से को निकालने के लिए एक कॉम्पैक्ट/कुशल पद्धति है: उदाहरण के लिए, मैं कुछ इस तरह करने से 3 आयाम में एक हिस्से को निकाल सकते हैं? उदाहरण के लिए, ऐसा कुछ ऐसा दिखता है?

A = rand(27,33,11) 
dim = 3 ## dimension along which to grab a portion of the array 
first_element = 3 ## first element over specified dimension 
last_element = 7 ## last element over specified dimension 
A_portion = MyFunction(A,dim,first_sample,last_sample) 

एक संभावना और आयाम है जो साथ भाग निकालने के लिए (आयामों के कुछ अधिकतम संख्या तक) सरणी आयाम के हर संभव संयोजन के लिए अगर-विवरणों के एक सेट में लिखने के लिए है। उदाहरण के लिए, कुछ इस तरह:

MyFunction(A::Array,dim::Int,first_element::Int,last_element::Int) 
    if ndims(A)==1 && dim==1 
     return A[first_element:last_element] 
    elseif ndims(A)==2 && dim==1 
     return A[first_element:last_element,:] 
    elseif ndims(A)==2 && dim==2 
     return A[:,first_element:last_element] 
    elseif ndims(A)==3 && dim==1 
     ... 
     ... 
     ... 

जाहिर है इस क्रम में काफी गंदा आयामों की बड़ी संख्या के साथ सरणियों के लिए अनुमति देने के लिए हो जाता है। क्या ऐसा करने के लिए कोई और कॉम्पैक्ट/कुशल दृष्टिकोण है?

उत्तर

7

समारोह slicedim करता है:

julia> a = rand(2,2,2) 
2×2×2 Array{Float64,3}: 
[:, :, 1] = 
0.754584 0.133549 
0.363346 0.731388 

[:, :, 2] = 
0.415001 0.907887 
0.301889 0.763312 

julia> slicedim(a, 1, 2) 
2×2 Array{Float64,2}: 
0.363346 0.301889 
0.731388 0.763312 

julia> slicedim(a, 3, 1) 
2×2 Array{Float64,2}: 
0.754584 0.133549 
0.363346 0.731388 

दूसरा तर्क आयाम संख्या निर्दिष्ट करता है। पहले मामले में, हम आयाम 1 में सूचकांक 2 चयनित दूसरे मामले में, हम आयाम में सूचकांक 1 चयनित 3.

तुम भी एक साथ हैक कर सकते हैं यह कुछ a[fill(:,2)...,1] की तरह उपयोग करने के लिए दृष्टिकोण है जो "सूचकों" दो : रों में तर्क सूची 1 के बाद।

+1

उत्कृष्ट। ऐसा लगता है कि सूचकांक की एक श्रृंखला निर्दिष्ट करना भी संभव है: 'A_portion = slicedim (ए, मंद, first_element: last_element) ' – Landon