2013-06-26 7 views
6

k अगर मैं एक सरणी एकघटाना मैट्रिक्स, कश्मीर आयाम n के मैट्रिक्स की सरणी से, आयाम

A <- array(0, c(4, 3, 5)) 
for(i in 1:5) { 
    set.seed(i) 
    A[, , i] <- matrix(rnorm(12), 4, 3) 
} 

है और अगर मैं मैट्रिक्स बी

set.seed(6) 
B <- matrix(rnorm(12), 4, 3) 

बी घटाना कोड है से सरणी एक से प्रत्येक मैट्रिक्स होगा:

d<-array(0, c(4,3,5)) 
for(i in 1:5){ 
    d[,,i]<-A[,,i]-B 
} 

हालांकि, "एक से एक ही गणना एक समारोह का उपयोग कर प्रदर्शन करने के लिए कोड होगा प्लीज "परिवार?

उत्तर

8

यह वही है sweep के लिए है।

sweep(A, 1:2, B) 
+0

इस जानकारी के लिए बहुत धन्यवाद –

+0

एक पूरी तरह से गैर-सहज ज्ञान युक्त नाम (गैर-सांख्यिकीविदों के साथ) एक और शक्तिशाली कमांड ... मुझे आर पसंद है! नाम 'लागू' के विपरीत है। – smci

6

हो सकता है कि बहुत सहज ज्ञान युक्त नहीं:

A[] <- apply(A, 3, `-`, B) 
+0

मूल्यवान उत्तर के लिए टीएनएक्स। कृपया मुझे बताएं कि ए [] को रखते हुए हम वास्तव में आर को क्या कहते हैं? –

+2

इसका मतलब ब्रैकेट के भीतर 'ए' के तत्वों को असाइन करना है। आपको याद हो सकता है कि अनुक्रमण करते समय, एक लापता आयाम का अर्थ है "उस आयाम में सभी तत्वों का चयन करें", उदाहरण के लिए 'मैट [1,]' मतलब है "पहली पंक्ति और मैट्रिक्स 'mat' के सभी कॉलम" का चयन करें। यह सम्मेलन एकल-आयामी अनुक्रमण करते समय भी होता है, इसलिए '[] 'का अर्थ है" सभी तत्वों का चयन करें "। यहां यह क्या है कि यह 'आयाम' को इसके आयामों को बरकरार रखने के लिए असाइन करता है। यह यहां जरूरी है क्योंकि 'लागू' स्वयं एक द्वि-आयामी संरचना लौटाएगा, जबकि हम 3-आयामी परिणाम चाहते हैं। –

+0

ग्रेट स्पष्टीकरण, बहुत धन्यवाद :) –

4

आपने पिछले सरणी आयाम पर पाशन कर रहे हैं, तो आप बस कर सकते हैं:

d <- A - as.vector(B) 

और यह बहुत तेजी से किया जाएगा। यह वही विचार है जब आप एक मैट्रिक्स से वेक्टर घटाते हैं: वेक्टर को पुनर्नवीनीकरण किया जाता है, इसलिए यह प्रत्येक कॉलम पर घटाया जाता है।

+0

+1 यह एक अच्छा तथ्य है –

+0

मुझे सरणी के पूरे आयामों पर लूप की आवश्यकता है। शायद मैंने कुछ गलतफहमी पेश की क्योंकि पहली पोस्ट में मैंने set.seed लिखा था (5) केवल सरणी के अंतिम आयाम के लिए संख्यात्मक मतभेद दे रहा था। हालांकि, मैंने पोस्ट को संपादित किया (उदा। Set.seed (i)) और संभवतः जो मैं अधिक अंतर्ज्ञानी और स्पष्ट करने का इरादा रखता हूं उसे बना देता हूं। हालांकि, उत्तर के लिए बहुत धन्यवाद! –

+0

@Newbie_R: मुझे नहीं लगता कि आपको लगता है कि मेरा जवाब आपके जैसा ही परिणाम दे रहा है। – flodel

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