0Pricing
R Academy · درس

حسابات المصفوفات وعملياتها

نفّذ الضرب العنصري وضرب المصفوفات والجمع والطرح.

حسابات المصفوفات وعملياتها درس مجاني في R Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.

العمليات على مستوى العنصر مقابل عمليات المصفوفات

تميّز R بين العمليات على مستوى العنصر (باستخدام + و- و* و/) وعمليات المصفوفات الفعلية (باستخدام %*%). ويُعد فهم هذا الفرق ضروريًا لإجراء جبر خطي صحيح.

A <- matrix(c(1,2,3,4), nrow = 2)
B <- matrix(c(5,6,7,8), nrow = 2)
cat('A:
'); print(A)
cat('B:
'); print(B)

# Element-wise multiply
cat('A * B (element-wise):
'); print(A * B)
# Matrix multiply
cat('A %*% B (matrix mult):
'); print(A %*% B)

الجمع والطرح على مستوى العنصر

يؤدي استخدام + و- بين مصفوفتين لهما الأبعاد نفسها إلى جمع العناصر المتناظرة أو طرحها. وهذه عمليات تتم بالكامل على مستوى العناصر.

# Monthly revenue vs target (in thousands)
revenue <- matrix(c(120,135,110,98, 145,160,132,115),
                  nrow = 2, byrow = TRUE)
target  <- matrix(c(130,130,130,130, 150,150,150,150),
                  nrow = 2, byrow = TRUE)

deviation <- revenue - target
cat('Revenue vs Target deviation:
')
print(deviation)
cat('Above target?:
')
print(revenue >= target)

القسمة والضرب على مستوى العنصر

وبالمثل، يعمل كل من * و/ بين مصفوفتين متساويتين في الحجم على كل عنصر على حدة. ويفيد ذلك في تغيير المقياس أو التطبيع أو دمج المصفوفات عنصرًا بعنصر.

# Scale a matrix by another (element-wise)
prices <- matrix(c(10, 20, 15, 25), nrow = 2)
quantities <- matrix(c(5, 3, 8, 2), nrow = 2)

total_cost <- prices * quantities
cat('Total cost per item:
')
print(total_cost)

# Normalise to row maximum
max_prices <- matrix(rep(apply(prices, 1, max), 2), nrow = 2)
norm_prices <- prices / max_prices
cat('Normalised prices:
')
print(norm_prices)

العمليات العددية على المصفوفات

يمكنكم تطبيق عملية على عدد قياسي (عدد مفرد) على كل عنصر في المصفوفة باستخدام معاملات الحساب القياسية. وتُكرَّر قيمة العدد القياسي لتتوافق مع أبعاد المصفوفة.

m <- matrix(c(10, 20, 30, 40, 50, 60), nrow = 2, ncol = 3)
cat('Original:
'); print(m)

cat('m + 5:
');  print(m + 5)
cat('m * 2:
');  print(m * 2)
cat('m / 10:
'); print(m / 10)
cat('m ^ 2:
');  print(m ^ 2)

الضرب الحقيقي للمصفوفات %*%

ينفّذ A %*% B ضرب المصفوفات في الجبر الخطي. ولكي ينجح ذلك، يجب أن يساوي عدد أعمدة A عدد صفوف B. وتكون أبعاد النتيجة (صفوف A) × (أعمدة B).

# 2x3 times 3x2 = 2x2
A <- matrix(c(1,2,3, 4,5,6), nrow = 2, byrow = TRUE)
B <- matrix(c(7,8, 9,10, 11,12), nrow = 3, byrow = TRUE)
cat('A (2x3):
'); print(A)
cat('B (3x2):
'); print(B)
cat('A %*% B (2x2):
'); print(A %*% B)

rowSums() و colSums()

تحسب rowSums(m) مجموع كل صف، بينما تحسب colSums(m) مجموع كل عمود. ويعيد كلاهما متجهات مسماة إذا كانت للمصفوفة أسماء أبعاد.

sales <- matrix(
  c(120,135,110,98,  145,160,132,115,  88,95,102,78),
  nrow = 3, byrow = TRUE,
  dimnames = list(c('Q1','Q2','Q3'), c('Jan','Feb','Mar','Apr'))
)
cat('Sales matrix:
'); print(sales)
cat('Quarterly totals:', rowSums(sales), '
')
cat('Monthly totals: ', colSums(sales), '
')

rowMeans() و colMeans()

تعيد rowMeans(m) وcolMeans(m) متوسط كل صف وعمود على التوالي. وهما أسرع من تطبيق mean() باستخدام apply() لهذه المهمة الشائعة.

exam_scores <- matrix(
  c(88,92,75,81, 79,85,90,73, 95,78,82,88),
  nrow = 3, byrow = TRUE,
  dimnames = list(c('Alice','Bob','Carol'), c('Math','Sci','Eng','Hist'))
)
cat('Student averages:
')
print(rowMeans(exam_scores))
cat('Subject averages:
')
print(colMeans(exam_scores))

عمليات المقارنة على المصفوفات

تعيد معاملات المقارنة (== و> و<= وغيرها) عند تطبيقها على المصفوفات مصفوفة منطقية بالأبعاد نفسها. ويمكنكم بعد ذلك استخدام هذه القناع للتحديد الجزئي أو العد.

scores <- matrix(c(88,45,92,61,73,55,84,79), nrow = 2)
cat('Scores:
'); print(scores)

# Which elements pass?
passing_mask <- scores >= 60
cat('Passing mask:
'); print(passing_mask)
cat('Number passing:', sum(passing_mask), '
')
cat('Passing scores:', scores[passing_mask], '
')

apply() لعمليات الصفوف أو الأعمدة المخصصة

تطبّق apply(m, MARGIN, FUN) دالة على الصفوف (MARGIN=1) أو الأعمدة (MARGIN=2). استخدموها عندما تحتاجون إلى تجميع مخصص يتجاوز ما توفره rowSums/colMeans.

m <- matrix(c(3,1,4,1,5,9,2,6,5,3,5,8), nrow = 3)
cat('Matrix:
'); print(m)

# Max of each row
cat('Row max:  ', apply(m, 1, max), '
')
# Range of each column
cat('Col range:
')
print(apply(m, 2, range))
# Custom: count values > 4 per row
cat('Values > 4 per row:', apply(m, 1, function(x) sum(x > 4)), '
')

تعميم متجه عبر الصفوف

عند جمع متجه إلى مصفوفة أو ضربه فيها، تعيد R استخدام المتجه — فتكرر عناصره دوريًا لتتوافق مع طول المصفوفة. ويجري التكرار عمودًا تلو الآخر، ما قد يؤدي إلى نتائج غير متوقعة إذا كنتم تريدون إجراء عمليات على مستوى الصفوف.

m <- matrix(c(10,20,30, 40,50,60), nrow = 2)
cat('Matrix:
'); print(m)

# Add a 3-element vector: R recycles column-by-column
v <- c(1, 2, 3)
cat('m + c(1,2,3):
'); print(m + v)

# For row-wise scaling, use sweep()
row_weights <- c(0.5, 2.0)  # scale row 1 by 0.5, row 2 by 2
cat('Row-wise scaled:
'); print(sweep(m, 1, row_weights, '*'))

ملخص العمليات الحسابية

أهم دوال عمليات المصفوفات في R:

  • + و- و* و/ — حساب على مستوى العنصر
  • %*% — ضرب المصفوفات (الجبر الخطي)
  • rowSums() وcolSums() — مجاميع الصفوف أو الأعمدة
  • rowMeans() وcolMeans() — متوسطات الصفوف أو الأعمدة
  • apply(m, 1, fn) / apply(m, 2, fn) — تجميع مخصص للصفوف أو الأعمدة
  • sweep() — عمليات على مستوى الصفوف أو الأعمدة باستخدام متجه
m <- matrix(c(4,9,16,25), nrow = 2)
cat('Original:
'); print(m)
cat('sqrt (element-wise):
'); print(sqrt(m))
cat('rowSums:', rowSums(m), '
')
cat('colMeans:', colMeans(m), '
')

تحقق سريع

ماذا تحسب A * B عندما تكون A وB مصفوفتين 2x2 في R؟

مراجعة: العمليات الحسابية على المصفوفات

أحسنتم! فيما يلي أهم ما تعلمتموه في هذا الدرس:

  • تُجرى + و- و* و/ على المصفوفات على مستوى العنصر
  • %*% هو ضرب المصفوفات الفعلي (الصفوف × الأعمدة)
  • تُجري rowSums() وcolSums() وrowMeans() وcolMeans() تجميعًا على الصفوف أو الأعمدة
  • تعيد معاملات المقارنة مصفوفة منطقية بالشكل نفسه
  • تطبّق apply(m, 1, fn) دالة على مستوى الصفوف، بينما تطبقها apply(m, 2, fn) على مستوى الأعمدة
  • استخدموا sweep() لتغيير مقياس الصفوف أو الأعمدة باستخدام المتجهات
# Final: compute grade curve (add 5 to all scores, cap at 100)
raw <- matrix(c(88,55,92,73,60,45,78,95), nrow = 2)
curved <- pmin(raw + 5, 100)  # pmin applies min element-wise
cat('Raw:
');    print(raw)
cat('Curved:
'); print(curved)

الأسئلة الشائعة

هل درس «حسابات المصفوفات وعملياتها» مجاني؟

نعم — نص درس «حسابات المصفوفات وعملياتها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.

ماذا ستتعلم في «حسابات المصفوفات وعملياتها»؟

نفّذ الضرب العنصري وضرب المصفوفات والجمع والطرح. تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟

لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «حسابات المصفوفات وعملياتها»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟

نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إنشاء المصفوفات باستخدام matrix()
  2. فهرسة المصفوفات واختيار أجزائها
  3. حسابات المصفوفات وعملياتها
  4. تبديل المصفوفات وإعادة تشكيلها
← العودة إلى R Academy