2013-10-07 10 views
23

मान लीजिए कि आपके पास matrices की सूची है। तत्व मूल द्वारा तत्व पर माध्य मैट्रिक्स की गणना करने का सबसे सुविधाजनक तरीका क्या है? मान लीजिए हम मैट्रिक्स की एक सूची है:matrices

> A <- matrix(c(1:9), 3, 3) 
> A 
    [,1] [,2] [,3] 
[1,] 1 4 7 
[2,] 2 5 8 
[3,] 3 6 9 
> B <- matrix(c(2:10), 3, 3) 
> B 
    [,1] [,2] [,3] 
[1,] 2 5 8 
[2,] 3 6 9 
[3,] 4 7 10 
> my.list <- list(A, B) 

तो वांछित आउटपुट होना चाहिए:

 [,1] [,2] [,3] 
[1,] 1.5 4.5 7.5 
[2,] 2.5 5.5 8.5 
[3,] 3.5 6.5 9.5 
+0

क्या आप जो कुछ करने की कोशिश कर रहे हैं उसके बारे में थोड़ा संकेत दे सकते हैं? इस तरह के मामले में, '(ए + बी)/2' आपको अपना जवाब देता है, लेकिन मुझे लगता है कि आप कुछ और ढूंढ रहे हैं .... – A5C1D2H2I1M1N2O1R2T1

+0

हाँ, आप सही हैं। मुझे 'माध्य()' और 'sd()' लागू करने की आवश्यकता है। – Andrej

+1

उपरोक्त क्योंकि डुप्लिकेट उत्तरों की तुलना में इस पोस्ट का शीर्षक बहुत वर्णनात्मक है। – Megatron

उत्तर

48

आप उपयोग कर सकते हैं:

Reduce("+", my.list)/length(my.list) 

टिप्पणियों के अनुसार, आप चाहते हैं दोनों mean और sd matrices की एक सूची पर लागू किया गया है, और उपर्युक्त तरीके sd के लिए आसानी से काम नहीं करेंगे। ऐसा करें:

apply(simplify2array(my.list), 1:2, mean) 
apply(simplify2array(my.list), 1:2, sd) 
3

यहाँ एक विकल्प है कि बहुत जल्दी होना चाहिए के रूप में हम मैट्रिक्स के साथ काम करने के लिए डिज़ाइन आधार कार्यों के साथ काम कर रहे हैं है। हम सिर्फ अपनी सूची लेने के लिए और एक 3 डी सरणी में यह तो चालू करने के लिए array का उपयोग भी उपयोग apply या सिर्फ rowMeans ...

# Make some data, a list of 3 matrices of 4x4 
ll <- replicate(3 , matrix(sample(5,16,repl=TRUE) , 4) , simplify = FALSE) 

# Make a 3D array from list of matrices 
arr <- array(unlist(ll) , c(4,4,3)) 

# Get mean of third dimension 
apply(arr , 1:2 , mean) 
#  [,1]  [,2]  [,3]  [,4] 
#[1,] 3.000000 3.666667 3.000000 1.666667 
#[2,] 2.666667 3.666667 3.333333 3.666667 
#[3,] 4.666667 2.000000 1.666667 3.666667 
#[4,] 1.333333 4.333333 3.666667 3.000000 

या आप जो तेज है rowMeans उपयोग कर सकते हैं, यह निर्दिष्ट आप 2 से अधिक मतलब प्राप्त करना चाहते हैं आयाम ...

# Get mean of third dimension 
rowMeans(arr , dims = 2) 
#  [,1]  [,2]  [,3]  [,4] 
#[1,] 3.000000 3.666667 3.000000 1.666667 
#[2,] 2.666667 3.666667 3.333333 3.666667 
#[3,] 4.666667 2.000000 1.666667 3.666667 
#[4,] 1.333333 4.333333 3.666667 3.000000 
संबंधित मुद्दे