매트릭스(matrix, 행렬)
같은 자료형의 여러개의 데이터를 2차원 구조로 저장한다.
행: 가로줄, row
열: 세로줄, column
매트릭스 생성
matrix(2차원 벡터)
벡터를 기반으로 행렬을 생성한다.
ex) 20칸 짜리 벡터를 4행5열의 매트릭스로 생성
matrix 생성 함수(기능) 존재, arguments(인수) 정보
(data) 값 전달
(nrow) 행의개수
(ncol) 열의개수
(byrow) False(데이터를 채우는 방향, 기본 열방향), True(행방향)
###########################
# 매트릭스 생성
help(matrix)
matrix(data = 16) # 데이터 1개
matrix(data = 1:16)
matrix(data = 1:16, nrow=4, ncol=4) # 값이 채워지는 방향 세로
matrix(data = 1:16, nrow=4)
matrix(data = 1:16, ncol=8)
matrix(data = 1:16, ncol=7) # 부족한값은 재사용
# byrow=TRUE : 가로 방향 채우기
matrix(data = 1:16, nrow=4, byrow=TRUE)
# 가로 index, 세로 index가 존재
matrix(data = 1:16, nrow=2, byrow=TRUE)
매트릭스와 연산자
매트릭스와 비교 연산자를 비교하면 결과가 논리벡터가 나온다
*매트릭스와 연산자(비교, 산술 등)를 사용하면 element(요소)간 연산 수행
m2 <- matrix(data=1:4, nrow=2)
# 1 3
# 2 4
m2 > 2
# F T
# F T
매트릭스에서 요소 가져오기
매트릭스명[행 인덱스 번호, 열 인덱스 번호]
* 매트릭스의 요소는 행과 열 인덱스 번호 2개를 가지고 있다.
1. 하나의 행 요소 가져오기
매트릭스명[행 인덱스번호, ]
* 생략된 인덱스 번호는 모든 것(열)을 의미
2. 하나의 열 요소 가져오기
매트릭스명[, 열 인덱스번호]
* 생략된 인덱스 번호는 모든 것(행)을 의미
3.하나의 요소 가져오기
매트릭스명[행 인덱스번호, 열 인덱스번호]
4.특정 행과 열을 제외한 데이터 가져오기
매트릭스명[-제외할 행 인덱스번호, -제외할 열 인덱스번호]
###########
# 매트릭스에서 요소 가져오기
m1 <- matrix(data = 1:16, ncol=4)
m1
# 데이터 10의 요소 가져오기
m1[2,3]
# 데이터 15의 요소 가져오기
m1[3,4]
# 매트릭스에서 2행의 요소 가져오기
m1[2,] # 비어있으면 모든 요소
m1[,3]
# 부분 요소 가져오기
m1[1:2, ]k
# 매트릭스 구조로 가져오기, drop=F 속성 사용
m1[, 3, drop=F]
# 1행,3행의 2열,4열의 데이터 가져오기
m1[c(1,3), c(2,4)]
#음수 인덱스(제외하기)도 행과 열 모두 사용가능
m1[-1, -1]
# 쉼표 없이 인덱스 번호를 가져오면, 벡터의 인덱스가 됨
# 매트릭스를 벡터로 변환후 해당 인덱스를 가져옴
m1[1]
# 기본 열단위로 벡터를 풀어서 반환함
m1[3]
# 행단위 매트릭스의 벡터 변환후 값 확인하기
m2<-matrix(data=1:16, ncol=4, byrow=TRUE)
m2
m2[3]
# matrix를 vector로 명시적으로 변환하여 확인
m2_v = as.vector(m2)
m2_v
m2_v[3]
# maxtrix를 행단위로 벡터로 변환하는 방법
# T(Transpose): 전치행렬 만듦, 대각선 방향 치환
m2
t(m2)
m2_v_t = as.vector(t(m2))
m2_v_t
m2_v_t[3]
# m1에서 10보다 큰 요소 가져오기
m1>10
m1[m1>10]
# 1행에서 10보다 큰 요소 가져오기
m1[1, m1>10] # 에러
m1[1, m1[1,] >10]
m1[1,] > 10
#문) 3열에서 10보다 큰 요소 가져오기
m1 <- matrix(data = 1:16, ncol=4)
#과제3.
#아래의 코드를 실행했을때 1 37 NA를 가져오게 됩니다.
#그이유는?
nums <- c(1, 3, NA, 10, 37)
nums[c(T,F,F,F,T,T)]
###############################
# 매트릭스를 인덱스로 사용하기
m1
m_idx = matrix(data=c(1,1,2,2), nrow=2, byrow=T)
m_idx
m1[m_idx]
*만약에 인덱스 자리에 매트릭스를 사용한다면,
1) 논리 매트릭스
기준 매트릭스와 인덱스로 사용하는 매트릭스가
둘다 벡터로 변환되어 벡터(논리벡터)로 사용된다
-> 결과가 벡터로 나온다.
2) 숫자 매트릭스
인덱스로 사용하는 매트릭스의 각 행 요소를
기준 매트릭스 행과 열 인덱스 번호로 사용한다.
매트릭스의 정보
1. str(): 매트릭스의 정보
2. length(): 매트릭스의 전체 데이터의 개수
3. dim(): 행과 열의 수, dimension(차원)
* 직선: 1차원
표: 2차원
공간: 3차원
4. nrow(): 매트릭스의 행의 개수
5. ncol(): 매트릭스의 열의 개수
6. dimnames(): 매트릭스의 행과 열의 이름
* rownames(): 행이름
* colnames(): 열이름
-> 매트릭스도 벡터와 마찬가지로 이름을 붙이면
인덱스번호 대신 이름을 사용할 수 있다.
#######################
# 매트릭스 정보 확인
# 매트릭스 정보확인: 자료형, 행번호/열번호, 총 데이터
str(m1)
# 매트릭스 데이터 개수
length(m1)
class(m1) # 자료구조의 자료형
mode(m1) # 데이터의 자료형
typeof(m1)# 데이터의 자료형(내부저장관점)
#벡터여부 확인
is.matrix(m1)
is.matrix(1:3)
#행/열의 개수
dim(m1)
#행/열의 이름
dimnames(m1)
colnames(m1)
rownames(m1)
#행/열에 이름 붙이기
rownames(m1) <- c("R1", "R2", "R3", "R4")
m1
colnames(m1) <- c("C1", "C2", "C3", "C4")
m1
colnames(m1)
rownames(m1)
dimnames(m1)
m1[1,]
m1["R1",]
#벡터의 데이터 추가
v1<-1:5
v2<-10:15
v1; v2
v3 <- c(v1, v2)
v3
v4 <- c(v3, 100)
v4
# 매트릭스의 추가(노트정리 후 추가 실습)
m3 <- c(m1, matrix(1:4, 2))
m3
매트릭스 사용
1.추가
행추가: rbind(기존 매트릭스, 추가할 행)
열추가: cbind(기존 매트릭스, 추가할 열)
2.수정
매트릭스명[행 인덱스번호, 열 인덱스번호] <- 새로운 값
3.삭제
매트릭스명 <- 삭제할 요소를 제외하고 가져온 매트릭스
########
# 매트릭스 사용
# 매트릭스는 벡터와 다르게 길이를 넘은
# 인덱스를 사용하면 에러 발생
m1[5,]
#추가
# cbind:열추가
m1
cbind(m1, 1:4)
#추가할려는 벡터를 변수에 담으면
#행 또는 열의 이름을 벡터명으로 자동 사용
C5 <- 1:4
cbind(m1, C5)
R5 <- 10:13
rbind(m1, R5)
help(rbind)
# 행렬끼리 연결시, 행과, 열의 개수가 동일해야함
rbind(m1, matrix(20:35, 4))
# 수정
m1[1,1] <- 1000
m1
m1[2,] <- 99
m1
# 수정할려는 값의 길이와 행렬의 행,열의 길이가 일치해야함
m1[3,] <- 1:6
cat(length(1:6), length(m1[3,]))
m1
#삭제
m1[-2, ]
m1_d = m1[-2, ]
m1_d
# 매트릭스 연산
m2 <- matrix(1:6, nrow=2)
m2
# 10이 6개 들어가 있는 벡터 생성
m3 <- matrix(rep(10, 6), nrow=2)
m2 + m3
m2 * m3
# 매트릭스끼리는 서로 길이가 같아야 연산가능
m4 <- matrix(rep(10,4), nrow=2)
m2 + m4
m5 <- matrix(rep(10,6), ncol=2)
m5
m2
# 행렬의 내적
# 같은 위치 원소끼리 곱한 뒤 합산
m2 %*% m5'프로그래밍 > R' 카테고리의 다른 글
| R언어, 자료구조 정리(스칼라, 벡터, 매트릭스, 배열, 데이터프레임, 리스트, 팩터) (0) | 2025.10.03 |
|---|---|
| R언어, 제어문 (0) | 2025.09.20 |
| R언어 벡터 (0) | 2025.09.09 |
| R 연산자 (1) | 2025.09.08 |
| 컴퓨터 기초, 프로그래밍 기초(변수, 자료형) (0) | 2025.09.07 |