R में मैट्रिक्स फ़ंक्शन: कॉलम और स्लाइस बनाएँ, प्रिंट करें, जोड़ें

⚡ स्मार्ट सारांश

R में मैट्रिक्स एक द्वि-आयामी सरणी है जो m पंक्तियों और n स्तंभों में एक ही प्रकार का डेटा रखती है, जिसे matrix() फ़ंक्शन से बनाया जाता है, cbind() और rbind() से विस्तारित किया जाता है, और वर्ग कोष्ठक के माध्यम से पहुँचा जा सकता है।

  • 🧩 संरचना: मैट्रिक्स एक वेक्टर होता है जिसमें एक dim विशेषता होती है, इसलिए प्रत्येक सेल में एक ही डेटा प्रकार होना चाहिए।
  • सृष्टि: matrix(data, nrow, ncol, byrow) एक अनुक्रम को व्यवस्थित करता है, और R लुप्त आयाम का अनुमान लगाता है।
  • 🔄 ऑर्डर भरें: byrow = FALSE कॉलम दर कॉलम भरता है, जबकि byrow = TRUE पंक्ति दर पंक्ति भरता है।
  • विकास : cbind() कॉलम जोड़ता है और rbind() पंक्तियाँ जोड़ता है, बशर्ते साझा आयाम मेल खाता हो।
  • टुकड़ा करना: m[row, column] पहले पंक्तियों को पढ़ता है, और एक खाली पक्ष उस पक्ष की सभी सामग्री का चयन करता है।
  • लेबल: dimnames, rownames() और colnames() [,1] प्लेसहोल्डर्स को पठनीय नामों से बदल देते हैं।
  • ➕➖ अंकगणित: तारांकन चिह्न तत्वों को आपस में गुणा करता है, जबकि %*% मैट्रिक्स गुणन करता है।

R में मैट्रिक्स फ़ंक्शन का उपयोग करके कॉलम और स्लाइस बनाएं, प्रिंट करें और जोड़ें।

आर में मैट्रिक्स फ़ंक्शन

R में मैट्रिक्स फ़ंक्शन एक 2-आयामी सरणी है जिसमें m संख्या में पंक्तियाँ और n संख्या में कॉलम होते हैं। दूसरे शब्दों में, R प्रोग्रामिंग में मैट्रिक्स एक ही डेटा प्रकार वाले दो या अधिक वैक्टर का संयोजन है।

असल में, मैट्रिक्स एक वेक्टर होता है जिसमें दो लंबाई का एक dim एट्रीब्यूट होता है। यही कारण है कि प्रत्येक तत्व का एक ही प्रकार होना आवश्यक है: जैसे ही कोई कैरेक्टर मान संख्याओं से जुड़ता है, पूरा मैट्रिक्स कैरेक्टर में बदल जाता है। R मानों को एक ही कॉलम-वार क्रम में संग्रहीत करता है और प्रत्येक पंक्ति के अंत का निर्धारण करने के लिए dim का उपयोग करता है, इसलिए चयन डाटा प्रकार यह एक ही बार में पूरी वस्तु पर लागू होता है।

नोट: matrix() फ़ंक्शन हमेशा दो आयाम लौटाता है। R में तीन या अधिक आयामों वाली संरचना बनाने के लिए, dim वेक्टर के साथ array() फ़ंक्शन का उपयोग करें, या सीधे dim() फ़ंक्शन को असाइन करें। नीचे दिया गया आरेख प्रत्येक मैट्रिक्स द्वारा अपनाए जाने वाले पंक्ति और स्तंभ लेआउट को दर्शाता है।

R में मैट्रिक्स फ़ंक्शन के पंक्तियों और स्तंभों का लेआउट

आर में मैट्रिक्स कैसे बनाएं

हम फ़ंक्शन का उपयोग करके एक मैट्रिक्स बना सकते हैं। आव्यूह()मूल R सिग्नेचर पाँच आर्गुमेंट लेता है, और यहाँ सबसे अधिक उपयोग किए जाने वाले तीन आर्गुमेंट दिखाए गए हैं:

matrix(data, nrow, ncol, byrow = FALSE)

तर्क:

  • तिथि: वे तत्व जिन्हें R मैट्रिक्स की पंक्तियों और स्तंभों में व्यवस्थित करेगा।
  • nrowपंक्तियों की संख्या।
  • एनकोलो: स्तंभों की संख्या।
  • बायरो: एक तार्किक चिह्न। डिफ़ॉल्ट रूप से byrow = FALSE होने पर मैट्रिक्स को कॉलम दर कॉलम, ऊपर से नीचे तक भरा जाता है। byrow = TRUE होने पर इसे पंक्ति दर पंक्ति, बाएं से दाएं तक भरा जाता है।
  • आयामी नाम: दो पंक्तियों के नाम और स्तंभों के नाम प्रदान करने वाली एक वैकल्पिक सूची।

पहले उदाहरण से पहले, R के मूल संदर्भ से दो बातें जानना ज़रूरी हैं। यदि nrow और ncol में से केवल एक ही दिया गया हो, तो R डेटा की लंबाई से दूसरे का अनुमान लगा लेता है। और यदि डेटा में आपके द्वारा मांगे गए आकार को भरने के लिए पर्याप्त तत्व नहीं हैं, तो मानों को अस्वीकार करने के बजाय पुनः उपयोग किया जाता है।

आइए, 1 से 10 तक की संख्याओं के अनुक्रम से दो 5×2 मैट्रिक्स बनाएं, एक में byrow = TRUE और दूसरे में byrow = FALSE हो, ताकि अंतर देखा जा सके।

# Construct a matrix with 5 rows that contain the numbers 1 up to 10 and byrow =  TRUE 
matrix_a <-matrix(1:10, byrow = TRUE, nrow = 5)
matrix_a

आउटपुट:

क्योंकि byrow = TRUE का उपयोग किया गया था, इसलिए कंसोल पहली पंक्ति को 1 और 2 से, दूसरी पंक्ति को 3 और 4 से, और इसी तरह आगे भरता है।

byrow = TRUE के साथ पंक्ति दर पंक्ति भरी गई matrix_a का कंसोल आउटपुट

अब, dim() के साथ R में मैट्रिक्स का आयाम प्रिंट करते हैं। dim() का उपयोग करके R में मैट्रिक्स प्रिंट करने का सिंटैक्स है:

# Print dimension of the matrix with dim()
dim(matrix_a)

आउटपुट:

## [1] 5 2

dim() फ़ंक्शन पहले पंक्तियों की संख्या और फिर स्तंभों की संख्या लौटाता है, जिससे 5×2 आकार की पुष्टि होती है।

कॉलम द्वारा मैट्रिक्स भरें, जहां पंक्ति = FALSE हो।

वही दस संख्याएँ और वही पंक्ति, भरने की दिशा बदलने पर एक अलग व्यवस्था उत्पन्न करती हैं।ping बायरो डिफ़ॉल्ट रूप से दूसरे कॉलम के शुरू होने से पहले पहले कॉलम में मान भेजता है।

# Construct a matrix with 5 rows that contain the numbers 1 up to 10 and byrow =  FALSE
matrix_b <-matrix(1:10, byrow = FALSE, nrow = 5)
matrix_b

आउटपुट:

मैट्रिक्स_बी का कंसोल आउटपुट, कॉलम दर कॉलम भरा हुआ, जिसमें byrow = FALSE है।

फिर से, dim() का उपयोग करके मैट्रिक्स के आयाम को प्रिंट करें। नीचे R प्रिंट मैट्रिक्स आयाम का सिंटैक्स दिया गया है:

# Print dimension of the matrix with dim()
dim(matrix_b)

आउटपुट:

## [1] 5 2

5×2 पर आकार अपरिवर्तित रहता है, क्योंकि बायरो भरने के क्रम को बदलता है, आयामों को कभी नहीं।

नोट: कमांड matrix_b <-matrix(1:10, byrow = FALSE, ncol = 2) का उपयोग करने से ऊपर जैसा ही प्रभाव पड़ेगा, क्योंकि R दिए गए दस मानों से nrow = 5 का अनुमान लगाता है।

आप ncol का उपयोग करके 4×3 मैट्रिक्स भी बना सकते हैं। R तीन कॉलम बनाएगा और प्रत्येक कॉलम को ऊपर से नीचे तक भरेगा। एक उदाहरण देखें।

matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_c

आउटपुट:

##       [,1] [,2] [,3]
## [1,]    1    5    9
## [2,]    2    6   10
## [3,]    3    7   11
## [4,]    4    8   12

कॉलम हेडर [,1] से [,3] और पंक्ति लेबल [1,] से [4,] R के डिफ़ॉल्ट प्लेसहोल्डर हैं। जैसे ही वास्तविक आयाम नाम दिए जाते हैं, ये गायब हो जाते हैं, जैसा कि इस ट्यूटोरियल में आगे दिखाया गया है।

उदाहरण:

dim(matrix_c)

आउटपुट:

## [1] 4 3

cbind() के साथ मैट्रिक्स में एक कॉलम जोड़ें

आप cbind() कमांड का उपयोग करके मैट्रिक्स R में कॉलम जोड़ सकते हैं। cbind() का अर्थ है कॉलम बाइंडिंग, और यह निर्दिष्ट संख्या में मैट्रिक्स या कॉलम को जोड़ सकता है। उदाहरण के लिए, हमारे पिछले उदाहरण ने 5×2 का मैट्रिक्स बनाया था। हमने इसमें तीसरा कॉलम जोड़ा और यह सत्यापित किया कि इसका आयाम 5×3 है।

उदाहरण:

# concatenate c(1:5) to the matrix_a
matrix_a1 <- cbind(matrix_a, c(1:5))
# Check the dimension
dim(matrix_a1)

आउटपुट:

## [1] 5 3

उदाहरण:

matrix_a1

उत्पादन

##       [,1] [,2] [,3]
## [1,]    1    2    1
## [2,]    3    4    2
## [3,]    5    6    3
## [4,]    7    8    4
## [5,]    9   10    5

उदाहरण:

हम एक साथ एक से अधिक कॉलम को भी जोड़ सकते हैं। अगला ब्लॉक matrix_a2 बनाता है, जो 13 से 24 तक की संख्याओं को रखने वाला 4×3 मैट्रिक्स है, ताकि इसे 4×3 मैट्रिक्स_c के साथ जोड़ा जा सके और 1 से 24 तक की संख्याओं को कवर करने वाला 4×6 परिणाम प्राप्त हो सके।

matrix_a2 <-matrix(13:24, byrow = FALSE, ncol = 3)

आउटपुट:

##      [,1] [,2] [,3]
## [1,]   13   17   21
## [2,]   14   18   22
## [3,]   15   19   23
## [4,]   16   20   24

उदाहरण:

matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)		
matrix_d <- cbind(matrix_a2, matrix_c)
dim(matrix_d)

आउटपुट:

## [1] 4 6

ध्यान देंR में मैट्रिक्स की पंक्तियों की संख्या बराबर होनी चाहिए तभी cbind() काम करेगा। यदि पंक्तियों की संख्या भिन्न होती है, तो R या तो कम पंक्तियों वाली मैट्रिक्स का उपयोग करता है या त्रुटि उत्पन्न करता है, इसलिए पहले दोनों ऑब्जेक्ट पर dim() की जाँच करना अधिक सुरक्षित है।

जहां cbind() कॉलम को जोड़ता है, वहीं rbind() पंक्तियों को जोड़ता है। आइए अपनी matrix_c मैट्रिक्स में एक पंक्ति जोड़कर यह सत्यापित करें कि इसका आयाम 5×3 है।

matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
# Create a vector of 3 columns
add_row <- c(1:3)
# Append to the matrix
matrix_c <- rbind(matrix_c, add_row)
# Check the dimension
dim(matrix_c)

आउटपुट:

## [1] 5 3

ध्यान दें कि add_row जैसे नाम वाले वेक्टर को बाइंड करने से नई पंक्ति को भी वही नाम मिल जाता है, जो आगे बताए गए लेबल वाली मैट्रिक्स की ओर पहला कदम है।

मैट्रिक्स को स्लाइस करें

हम एक मैट्रिक्स से एक या अनेक तत्वों का चयन कर सकते हैं। आर प्रोग्रामिंग वर्गाकार कोष्ठकों [ ] का उपयोग करके। कोष्ठकों के अंदर, पहले पंक्ति चयनकर्ता और फिर स्तंभ चयनकर्ता आता है, जो अल्पविराम से अलग होते हैं। यहीं पर स्लाइसिंग का महत्व सामने आता है।

उदाहरण के लिए:

  • मैट्रिक्स_सी[1,2] पहली पंक्ति और दूसरे कॉलम में तत्व का चयन करता है।
  • matrix_c[1:3,2:3] के परिणामस्वरूप एक R स्लाइस मैट्रिक्स प्राप्त होता है जिसमें डेटा पंक्तियों 1, 2, 3 और स्तंभ 2 और 3 पर होता है।
  • मैट्रिक्स_सी[,1] पहले कॉलम के सभी तत्वों का चयन करता है।
  • मैट्रिक्स_सी[1,] पहली पंक्ति के सभी तत्वों का चयन करता है।

अल्पविराम के एक तरफ को खाली छोड़ने का मतलब है उस तरफ के सभी मानों का चयन करना। इसका एक परिणाम शुरुआती लोगों को भ्रमित कर सकता है: जब एक पंक्ति या स्तंभ का चयन किया जाता है, तो R खाली आयाम को हटा देता है और एक साधारण वेक्टर लौटा देता है। drop = FALSE जोड़ने से, जैसे matrix_c[1, , drop = FALSE], परिणाम एक मैट्रिक्स ही रहता है।

उपरोक्त कोड के लिए आपको जो आउटपुट मिलेगा वह इस प्रकार है

R में चार मैट्रिक्स स्लाइसिंग अभिव्यक्तियों के कंसोल परिणाम

R में मैट्रिक्स की पंक्तियों और स्तंभों के नाम बताइए।

मैट्रिक्स का वास्तविक अर्थ सामने आते ही [,1] और [3,] जैसे डिफ़ॉल्ट लेबल आउटपुट को पढ़ना मुश्किल बना देते हैं। dimnames आर्गुमेंट और rownames() और colnames() रिप्लेसमेंट फ़ंक्शन टेक्स्ट लेबल जोड़ते हैं जो cbind(), t() और हर स्लाइसिंग ऑपरेशन के दौरान मैट्रिक्स के साथ चलते हैं।

# Name the rows and columns while the matrix is built
sales <- matrix(1:6, nrow = 2, ncol = 3,
                dimnames = list(c('north', 'south'), c('q1', 'q2', 'q3')))

# Or attach the names afterwards
rownames(sales) <- c('north', 'south')
colnames(sales) <- c('q1', 'q2', 'q3')

# Read the names back as a list of two character vectors
dimnames(sales)

# Names make label based slicing possible
sales['north', 'q2']
समारोह पुस्तकें सेट
dimnames(m) दोनों आयामों को दो सदिशों की सूची के रूप में दर्शाया गया है। dimnames(m) <- list(rows, cols)
पंक्ति नाम(एम) पंक्ति लेबल rownames(m) <- rows
कॉलनाम(एम) स्तंभ लेबल colnames(m) <- cols
मंद(एम) पंक्तियों और स्तंभों को दो पूर्णांकों के रूप में दर्शाया गया है। dim(m) <- c(nrow, ncol)

एक बार लेबल मौजूद हो जाने पर, sales['north', 'q2'] sales[1, 2] की तुलना में कहीं अधिक स्पष्ट होता है और पंक्तियों के पुनर्व्यवस्थापन के बाद भी बना रहता है। dimnames घटक को NULL पर सेट करने से लेबलों का वह सेट फिर से हट जाता है, और as.data.frame() के साथ परिवर्तित मैट्रिक्स अपनी पंक्ति और स्तंभ नामों को सीधे स्थानांतरित कर देता है। डेटा ढांचा.

मैट्रिक्स OperaR में क्रियाएँ: अंकगणित, स्थानान्तरण और गुणन

मैट्रिक्स पर अंकगणित में सिंगल-टाइप नियम का लाभ मिलता है। बेस R बिना किसी अतिरिक्त पैकेज के पूरे सेट को संभाल लेता है, लेकिन दो ऑपरेटरों को लेकर भ्रम हो सकता है: * तत्व-दर-तत्व गुणा करता है, जबकि %*% वास्तविक मैट्रिक्स गुणन करता है और इसके लिए आवश्यक है कि बाएँ ऑपरेंड के कॉलम दाएँ ऑपरेंड की पंक्तियों से मेल खाते हों।

m1 <- matrix(1:4, nrow = 2)
m2 <- matrix(5:8, nrow = 2)

m1 + m2          # element by element addition
m1 * m2          # element by element product, NOT matrix multiplication
m1 %*% m2        # true matrix multiplication
t(m1)            # transpose: rows become columns
solve(m1)        # inverse, for a square matrix that is not singular

rowSums(m1)      # one total per row
colMeans(m1)     # one mean per column
apply(m1, 1, max)   # any function, applied row by row
  • टी(एम): मैट्रिक्स को ट्रांसपोज़ करता है, जिससे तत्व [i, j] बदलकर [j, i] हो जाता है। आयामों के नाम बरकरार रहते हैं।
  • हल करें(एम): यह एक वर्ग, गैर-विलक्षण मैट्रिक्स का व्युत्क्रम लौटाता है, और solve(a, b) एक रैखिक प्रणाली को हल करता है।
  • पंक्ति योग / स्तंभ योग / पंक्ति माध्य / स्तंभ माध्य: इसे sum या mean के साथ apply() के समकक्ष प्रलेखित किया गया है, लेकिन यह काफी तेज है।
  • लागू करें(एम, मार्जिन, फन): MARGIN = 1 पंक्तियों को और MARGIN = 2 स्तंभों को प्रभावित करता है, चाहे आप कोई भी फ़ंक्शन प्रदान करें।
  • निदान, निर्धारण, क्रॉसप्रोडक्शन: t(x) %*% y का विकर्ण, निर्धारक और तेज़ रूप।

क्योंकि ये ऑपरेशन वेक्टर रूप में हैं, इसलिए ये लूप के अंदर होने के बजाय उन्हें प्रतिस्थापित करते हैं। एक सारांश जो हजारों सेल्स पर नेस्टेड फॉर लूप लेता, वह अब एक सिंगल colMeans() कॉल में बदल जाता है, जो डेटा बढ़ने पर महत्वपूर्ण हो जाता है।

R में मैट्रिक्स, डेटा फ्रेम और ऐरे का उपयोग

कंसोल में मैट्रिक्स, डेटा फ्रेम और एरे सभी आयताकार दिखाई देते हैं, फिर भी वे अलग-अलग प्रश्नों के उत्तर देते हैं। यह तालिका उन्हें साथ-साथ दर्शाती है।

संपत्ति मैट्रिक्स डेटा फ़्रेम ऐरे
आयाम वास्तव में २ वास्तव में २ कोई संख्या
कॉलम प्रकार पूरी वस्तु के लिए एक ही प्रकार प्रत्येक कॉलम के लिए एक अलग प्रकार पूरी वस्तु के लिए एक ही प्रकार
के साथ बनाया गया आव्यूह() डेटा.फ्रेम() सरणी ()
विशिष्ट उपयोग संख्यात्मक गणना और रैखिक बीजगणित मिश्रित अवलोकन डेटा स्टैक्ड टेबल, जैसे कि वर्षवार गणना।
पंक्ति लेबल वैकल्पिक आयाम नाम पंक्ति के नाम हमेशा मौजूद होते हैं वैकल्पिक आयाम नाम
# A matrix holds one type only, so mixing coerces everything to character
mixed <- matrix(c(1, 2, 'a', 'b'), nrow = 2)
class(mixed[1, 1])

# Convert between the structures
as.data.frame(matrix_c)
as.matrix(mtcars)

# A matrix is the two dimensional case of an array
is.matrix(matrix_c)
inherits(matrix_c, 'array')

जब प्रत्येक सेल में एक ही प्रकार की संख्या हो और काम अंकगणितीय हो, तो मैट्रिक्स का उपयोग करें। डेटा ढांचा जब कॉलम अलग-अलग प्रकार के डेटा रखते हैं, उदाहरण के लिए एक अक्षर का नाम, एक संख्यात्मक मूल्य के बगल में और एक कारकएक के लिए पहुँचें सूची जब भागों की लंबाई अलग-अलग होती है, और किसी ऐरे के लिए जब समय या क्षेत्र जैसे तीसरा इंडेक्स वास्तव में मौजूद होता है। as.matrix() और as.data.frame() का उपयोग करके दोनों दिशाओं में रूपांतरण सस्ता है, इसलिए संरचना कार्य का अनुसरण कर सकती है, न कि इसके विपरीत।

अक्सर पूछे जाने वाले प्रश्न

R इन मानों को अस्वीकार करने के बजाय उनका पुनर्चक्रण करता है, इसलिए matrix(1:3, nrow = 2, ncol = 3) अनुक्रम को दोहराता है। चेतावनी केवल तभी दिखाई देती है जब लंबाई सेल संख्या का सटीक गुणक नहीं होती है, जिससे मौन पुनर्चक्रण एक ऐसी त्रुटि बन जाती है जिसे आसानी से अनदेखा किया जा सकता है।

ऋणात्मक सूचकांक का प्रयोग करें: m[-2, ] दूसरी पंक्ति को हटा देता है और m[, -3] तीसरे स्तंभ को हटा देता है। m[-c(1, 4), ] का प्रयोग करके एक साथ कई मान हटाए जा सकते हैं। जब तक आप परिणाम को वापस असाइन नहीं करते, मूल ऑब्जेक्ट अपरिवर्तित रहता है।

किसी एक पंक्ति या स्तंभ का चयन करने पर खाली आयाम डिफ़ॉल्ट रूप से हट जाता है। एक पंक्ति वाली मैट्रिक्स को बनाए रखने के लिए drop = FALSE जोड़ें, जैसे कि m[1, , drop = FALSE]। यह तब महत्वपूर्ण होता है जब परिणाम को किसी ऐसे फ़ंक्शन को भेजा जाता है जो दो आयामों की अपेक्षा करता है।

which(m == value, arr.ind = TRUE) दो-स्तंभ वाला परिणाम देता है जिसमें प्रत्येक मिलान की पंक्ति और स्तंभ दिए गए होते हैं। arr.ind के बिना, उत्तर स्तंभों में नीचे की ओर गिना जाने वाला एक एकल रैखिक सूचकांक होता है, जो शायद ही कभी आप चाहते हैं।

array(data, dim = c(rows, columns, layers)) का उपयोग करें या dim(x) को सीधे वेक्टर पर असाइन करें। स्लाइसिंग में प्रति आयाम एक इंडेक्स लिया जाता है, जैसे a[2, 3, 1]। मैट्रिक्स, ऐरे का द्वि-आयामी रूप है।

जी हां। मूल R संदर्भ में कहा गया है कि rowSums और colMeans, sum या mean के साथ apply() के समतुल्य हैं, लेकिन बहुत तेज़ हैं, और दोनों एक स्पष्ट for लूप से बेहतर हैं क्योंकि पुनरावृति इंटरप्रेटर के बजाय संकलित कोड में होती है।

मॉडल फिटिंग रैखिक बीजगणित है: विशेषताएँ एक मैट्रिक्स बनाती हैं, गुणांक एक वेक्टर बनाते हैं, और भविष्यवाणी एक एकल %*% गुणनफल है। यंत्र अधिगम इसलिए पैकेज को इनपुट के रूप में डेटा फ्रेम के बजाय एक संख्यात्मक मैट्रिक्स की आवश्यकता होती है।

हां. गिटहब कोपिलॉट यह RStudio 2023.09.0 और उसके बाद के संस्करणों में चलता है और खुली हुई फ़ाइल में मौजूद टिप्पणियों से कोड को पूरा करता है। इसकी आयाम संबंधी तर्क प्रक्रिया की जाँच करें। RStudioक्योंकि गलत पंक्ति होने पर भी एक वैध मैट्रिक्स बनता है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: