📘 Lesson  ·  Lesson 62

Matrix Multiplication

Matrix multiplication का मतलब

Matrix बस संख्याओं का एक grid है जो rows और columns में सजा होता है — C में हम इसे 2D array के रूप में रखते हैं। दो matrices को गुणा करना उन्हें एक नई matrix में मिलाता है, पर सीधे मेल खाते cells गुणा करके नहीं। बल्कि result का हर cell पहली matrix की पूरी row और दूसरी की पूरी column से बनता है।

यही "row times column" विचार इस topic का दिल है। एक बार समझ आ जाए, तो C program बस तीन loops है जो इसे स्वचालित करते हैं।

नियम: गुणा कब हो सकता है?

आप किन्हीं भी दो matrices को गुणा नहीं कर सकते। एक सख़्त नियम है:

💡 Dimension नियम

पहली matrix के columns दूसरी की rows के बराबर होने चाहिए। अगर A m×n है और B n×p, तो result C m×p होती है। दोनों भीतरी n मान मेल खाने चाहिए।

हमारे उदाहरण में दोनों matrices 2×2 हैं, तो A के columns (2) B की rows (2) के बराबर हैं, और result भी 2×2 है।

एक result cell कैसे बनता है

चलिए दो 2×2 matrices लें और सिर्फ़ ऊपर-बाएँ cell निकालें, ताकि pattern दिखे:

Calculation
A = | 1  2 |     B = | 5  6 |
    | 3  4 |         | 7  8 |

c[0][0] = (A की row 0) . (B का col 0)
        = 1*5 + 2*7
        = 5 + 14
        = 19

तो ऊपर-बाएँ result 19 है। यही row-times-column विचार हर cell के लिए दोहराते हैं: c[0][1] = 1*6 + 2*8 = 22, वगैरह।

पूरा program

यहाँ 2×2 matrices के लिए पूरा C program है, result matrix शून्य से शुरू करते हुए।

C Language
#include <stdio.h>
int main() {
    int a[2][2] = {{1, 2}, {3, 4}};
    int b[2][2] = {{5, 6}, {7, 8}};
    int c[2][2] = {0};        // हर cell 0 से शुरू

    for (int i = 0; i < 2; i++)          // result की हर row
        for (int j = 0; j < 2; j++)      // result का हर column
            for (int k = 0; k < 2; k++)  // साझा dimension
                c[i][j] += a[i][k] * b[k][j];

    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++)
            printf("%d ", c[i][j]);
        printf("\n");
    }
    return 0;
}
Output:
19 22
43 50

तीन nested loops क्यों?

हर loop का साफ़ काम है:

LoopVariableइसका काम
बाहरीiResult row चुनता है
बीच काjResult column चुनता है
भीतरीkRow×column products जोड़ता है

बाहरी दो loops एक result cell पर इशारा करते हैं; भीतरी loop उस cell की value साझा dimension पर चलकर भरता है। यही row-times-column नियम code में बदला हुआ है।

आम गलतियाँ

  • Result matrix को 0 से initialise करना भूलना, जिससे += garbage पर जुड़ता है।
  • Row × column करने के बजाय cells सीधे गुणा करना (a[i][j] * b[i][j])।
  • Dimension नियम अनदेखा करके असंगत matrices गुणा करने की कोशिश।
  • a[i][k] * b[k][j] में index क्रम बदलना — साझा k मेल खाना चाहिए।
🏋️ अभ्यास

Program को बढ़ाकर 2×3 matrix को 3×2 matrix से गुणा करें। Array sizes और loop limits बदलें, और पुष्टि करें कि result 2×2 है। यह साबित करता है कि आप dimension नियम समझते हैं।

सारांश

  • Matrices पहली की row को दूसरी के column से मिलाकर गुणा होती हैं।
  • पहली के columns दूसरी की rows के बराबर हों (m×n गुणा n×p देता है m×p)।
  • हर cell c[i][j], k पर a[i][k]*b[k][j] जोड़ता है।
  • तीन nested loops: row, column, और साझा dimension।
  • जोड़ने से पहले result matrix को हमेशा 0 से initialise करें।

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

C में दो matrices कब गुणा हो सकती हैं?
दो matrices तभी गुणा हो सकती हैं जब पहली matrix के columns की संख्या दूसरी के rows की संख्या के बराबर हो। अगर matrix A m×n है और B n×p, तो result m×p matrix होती है। अगर वह भीतरी dimension मेल न खाए, तो गुणा परिभाषित नहीं है।
Result matrix का हर element कैसे बनता है?
हर result cell c[i][j] पहली matrix की i-वीं row और दूसरी की j-वें column के products का योग है। संगत elements गुणा करके जोड़ते हैं: c[i][j] = a[i][0]*b[0][j] + a[i][1]*b[1][j] + ...
C में matrix multiplication को तीन nested loops क्यों चाहिए?
बाहरी दो loops तय करते हैं कि आप कौन-सा result cell भर रहे हैं (उसकी row i और column j)। तीसरा, सबसे भीतरी loop k साझा dimension पर चलकर उस cell के लिए row-times-column योग निकालता है। तो तीनों चाहिए: दो cell ढूँढने के लिए, एक उसकी value बनाने के लिए।
Result matrix शून्य से क्यों शुरू होनी चाहिए?
क्योंकि हर cell += से एक-एक करके products जोड़कर बनता है। अगर cell 0 के बजाय garbage से शुरू हो, तो अंतिम योग गलत होगा। Result matrix को सब zeros से initialise करने से हर cell को साफ़ शुरुआत मिलती है।
क्या C में matrix multiplication commutative है?
नहीं। आम तौर पर A×B, B×A के बराबर नहीं होता — क्रम मायने रखता है, और कभी-कभी dimensions के आधार पर सिर्फ़ एक ही क्रम valid होता है। यह सामान्य संख्या गुणा से अलग है और beginners के लिए उलझन का आम कारण है।
← Back to C Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.