2013-06-02 8 views
5

मैं कुछ इस तरह से जाना चाहता हूँ: कुछ इस तरह करने के लिएBlockwise मैट्रिक्स तत्वों का योग

1> a = matrix(c(1,4,2,5,2,5,2,1,4,4,3,2,1,6,7,4),4) 
1> a 
    [,1] [,2] [,3] [,4] 
[1,] 1 2 4 1 
[2,] 4 5 4 6 
[3,] 2 2 3 7 
[4,] 5 1 2 4 

: ...

 [,1] [,2] 
[1,] 12 15 
[2,] 10 16 

के लिए-छोरों का उपयोग किए बिना, plyr, या अन्यथा के बिना पाशन। मुमकिन? मैं 5 आर्क-मिनट से आधे डिग्री तक भौगोलिक अक्षांश/लंबे डेटासेट को कम करने की कोशिश कर रहा हूं, और मुझे एएससीआई ग्रिड मिला है। एक छोटा सा समारोह जहां मैं ब्लॉकिज़ निर्दिष्ट करता हूं वह बहुत अच्छा होगा। मुझे सैकड़ों ऐसी फाइलें मिली हैं, इसलिए चीजें जो मुझे समानांतरता/सुपरकंप्यूटर के बिना जल्दी से करने की अनुमति देती हैं, उनकी बहुत सराहना की जाएगी।

उत्तर

7

आप इसके लिए मैट्रिक्स गुणा का उपयोग कर सकते हैं।

# Reduce a 4x4 matrix by a factor of 2: 

x <- mat(4, 2) 
x 
##  [,1] [,2] 
## [1,] 1 0 
## [2,] 1 0 
## [3,] 0 1 
## [4,] 0 1 

t(x) %*% a %*% x 
##  [,1] [,2] 
## [1,] 12 15 
## [2,] 10 16 

गैर वर्ग उदाहरण:

# Computation matrix: 

mat <- function(n, r) { 
    suppressWarnings(matrix(c(rep(1, r), rep(0, n)), n, n/r)) 
} 

स्क्वायर-मैट्रिक्स उदाहरण के लिए, एक मैट्रिक्स और a के प्रत्येक पक्ष पर अपनी पक्षांतरित का उपयोग करता

b <- matrix(1:24, 4 ,6) 
t(mat(4, 2)) %*% b %*% mat(6, 2) 
##  [,1] [,2] [,3] 
## [1,] 14 46 78 
## [2,] 22 54 86 
+0

वास्तव में बात की तरह मैं देख रहा था धन्यवाद, धन्यवाद! मेरा मैट्रिक्स वर्ग नहीं है, लेकिन इसका आधा है। –

0

मुझे लगता है कि आपकी मदद कर सकता है, लेकिन फिर भी यह sapply का उपयोग करता है जिसे लूप-आश टूल के रूप में माना जा सकता है।

a <- matrix(c(1,4,2,5,2,5,2,1,4,4,3,2,1,6,7,4),4) 
block.step <- 2 
res <- sapply(seq(1, nrow(a), by=block.step), function(x) 
    sapply(seq(1, nrow(a), by=block.step), function(y) 
     sum(a[x:(x+block.step-1), y:(y+block.step-1)]) 
    ) 
) 
res 

क्या यह किसी भी तरह सहायक है?

4
tapply(a, list((row(a) + 1L) %/% 2L, (col(a) + 1L) %/% 2L), sum) 
# 1 2 
# 1 12 15 
# 2 10 16 

मैं 1L और 2L बजाय 1 और 2 इस्तेमाल किया तो सूचकांक पूर्णांकों रहते हैं (के रूप में numerics के खिलाफ) और यह तेजी से कि जिस तरह से चलाना चाहिए।

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