אריתמטיקה של מטריצות
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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מטריצות
יצירת מטריצותאינדוקס מטריצותסיכומי שורות ועמודותאריתמטיקה של מטריצותסיכום – תרשים מקומות ישיבהתרגלו בעצמכם: קומפיילר R אונליין