الحساب على المصفوفات
جزء من قسم المنطق وتدفق التنفيذ في رحلة R على Coddy. الدرس 20 من 64.
تعمل العمليات الحسابية بين مصفوفة ورقم، أو بين مصفوفتين بالحجم نفسه، خليةً بخلية:
a <- matrix(1:4, nrow = 2, byrow = TRUE)
b <- matrix(c(10, 20, 30, 40), nrow = 2, byrow = TRUE)
print(a * 2)
print(a + b)الناتج:
[,1] [,2]
[1,] 2 4
[2,] 6 8
[,1] [,2]
[1,] 11 22
[2,] 33 44تعمل المقارنة أيضًا خليةً بخلية وتُرجع مصفوفة منطقية. استخدمها لعدّ الخلايا، أو كفهرس لتغيير الخلايا المطابقة فقط:
m <- matrix(c(4, 12, 7, 15), nrow = 2, byrow = TRUE)
print(sum(m > 10))
m[m > 10] <- 10
print(m)الناتج:
[1] 2
[,1] [,2]
[1,] 4 10
[2,] 7 10t(m) تبدّل الصفوف والأعمدة. %*% هي حاصل ضرب المصفوفتين، حيث تجمع كل خلية ناتجة بين صف من المصفوفة الأولى وعمود من المصفوفة الثانية، لذا يجب أن تساوي ncol(a) قيمة nrow(b):
a <- matrix(1:4, nrow = 2, byrow = TRUE)
print(t(a))
print(a %*% a)الناتج:
[,1] [,2]
[1,] 1 3
[2,] 2 4
[,1] [,2]
[1,] 7 10
[2,] 15 22تتوقف العمليات الحسابية عنصرًا بعنصر بين المصفوفات ذات الأحجام المختلفة مع ظهور الخطأ non-conformable arrays، لذا قارِن dim() أولًا. ولحاصل ضرب المصفوفات قاعدة حجم خاصة به:
a <- matrix(1:4, nrow = 2)
b <- matrix(1:6, nrow = 2)
print(identical(dim(a), dim(b)))
print(dim(a %*% b))الناتج:
[1] FALSE
[1] 2 3التحدي
سهلأكمل cap_values(m, limit). أعد سطرين: Over: مع عدد الخلايا التي تتجاوز limit، ثم Total: مع مجموع المصفوفة بعد استبدال كل قيمة تتجاوز limit بـ limit.
يقرأ الكود المُزوَّد مصفوفة من سطر واحد: تُفصل الصفوف باستخدام ;، وتُفصل قيم الصف باستخدام ,، لذا فإن 1,2;3,4 هي مصفوفة تحتوي على الصفين 1 2 و3 4. يحتوي السطر التالي على limit. يطبع الكود كل سطر مُعاد.
جرّب بنفسك
cap_values <- function(m, limit) {
# اكتب الكود الخاص بك هنا
c("Over: 0", "Total: 0")
}
# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
input <- suppressWarnings(readLines(file("stdin")))
parse_matrix <- function(line) {
rows <- strsplit(line, ";")[[1]]
matrix(as.numeric(unlist(strsplit(rows, ","))), nrow = length(rows), byrow = TRUE)
}
cat(cap_values(parse_matrix(input[1]), as.numeric(input[2])), sep = "\n")
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1السلاسل النصية بعمق
السلاسل الفرعية باستخدام substr()التنسيق باستخدام sprintf()التقسيم والضمالبحث في السلاسل النصيةاستبدال النصوصمراجعة - منشئ اسم المستخدم4المصفوفات
إنشاء المصفوفاتفهرسة المصفوفاتملخصات الصفوف والأعمدةالحساب على المصفوفاتمراجعة - مخطط المقاعد2استرجاع القيم باستخدام المفاتيح
البحث في المتجهات المُسمّاةالتحقق من المفاتيحإضافة المفاتيح وإزالتهاالتكرار عبر الأسماءمراجعة - مكتب الأسهمتدرّب بنفسك: مترجم R عبر الإنترنت