4행 5열인 2차원 배열 X에 70보다 큰 데이터가 몇개있는지 확인하자.
70보다 큰 데이터는 True가, 아닌것은 False가 나오는걸 볼수있다.
in:
X > 70
out:
array([[ True, True, False, False, True],
[False, False, False, False, False],
[False, False, False, False, False],
[ True, False, False, False, False]])
sum함수를 이용하여 70보다 큰 데이터의 개수를 확인할수 있다.
in:
(X > 70).sum()
out:
4
# True는 1, False는 0인 성질을 이용해 셀수있다.
X 중 70보다 큰 데이터만 가져온다고 한다면
in:
X[X > 70]
out:
array([91, 87, 88, 82])
# 리스트와 다른 데이터 스트럭쳐에서 했던것 처럼 대괄호를 활용하면 된다.
1차원 배열에서 원하는 인덱스의 수를 가져오자
3번 인덱스 안에 있는 숫자 2를 가져오자
in:
x[3]
out:
2
# 대괄호에 인덱스를 넣어 원하는 수를 가져오면 된다.
2차원 배열에서 원하는 인덱스의 수를 가져오자
1행의 4열에 있는 81을 가져오자
in:
X[0,3]
out:
81
# 콤마를 기준으로 왼쪽에는 행, 오른쪽은 열의 인덱스를 입력하면 된다.
delete 함수를 사용하여 데이터를 지정해서 삭제할수있다.
x = np.array([ 7, 3, 5, 2, 12, 2, 1])
네번째 데이터인 2를 삭제하자
in:
np.delete(x,3)
out:
array([ 7, 3, 5, 12, 2, 1])
※ 함수를 이용해서 삭제된걸 볼수있지만 원본은 삭제되지 않는다. 따라서 따로 변수저장을 해줘야 한다.
삭제할 인덱스가 2개 이상일때 리스트에 담아서 입력하면된다.
x = np.array([ 7, 3, 5, 12, 2, 1])
두번째와 마지막 데이터를 삭제하자
in:
np.delete(x,[1,-1])
out:
array([ 7, 5, 12, 2])
2차원 배열의 경우 axis를 활용해야한다.
X = np.array([
[80, 50, 60, 81, 78],
[70, 46, 41, 2, 23],
[89, 87, 97, 91, 54],
[ 7, 1, 4, 60, 77]])
3번째 행을 삭제하자
in:
np.delete(X,2,axis=0)
out:
array([[80, 50, 60, 81, 78],
[70, 46, 41, 2, 23],
[ 7, 1, 4, 60, 77]])
# 열을 삭제하고 싶으면 axis 값을 1로 설정하면된다.
※ 만약 세번째 파라미터를 따로 설정하지 않고 2차원 배열의 데이터를 삭제하면 1차원 배열로 나온다.
2차원 배열 또한 2개 이상의 행또는 열을 삭제 하고싶을때 리스트에 담아서 입력하면 된다.
in:
np.delete(X,[0,2,3],axis=1)
out:
array([[50, 78],
[46, 23],
[87, 54],
[ 1, 77]])
append 함수를 활용해 항목을 끝에 추가할수있다
1차원 배열일때:
x = np.array([ 7, 3, 5, 12, 2, 1])
배열에 100을 추가하자
in:
np.append(x, 100)
out;
array([ 7, 3, 5, 12, 2, 1, 100])
# 두개 이상의 항목을 추가하고 싶을때는 리스트에 넣어서 추가하면된다. (예: np.append(x, [200,300,350]))
2차원 배열일때:
a = np.array([[0, 1, 2, 3, 4]]) (2차원 배열)
X = np.array([
[80, 50, 60, 81, 78],
[70, 46, 41, 2, 23],
[89, 87, 97, 91, 54],
[ 7, 1, 4, 60, 77],
in:
np.append(X,a,axis=0)
out:
array([[80, 50, 60, 81, 78],
[70, 46, 41, 2, 23],
[89, 87, 97, 91, 54],
[ 7, 1, 4, 60, 77],
[ 0, 1, 2, 3, 4]])
# np.append(받을배열 ,넣을배열, axis=축값)
※ 만약 2차원 배열에 1차원 배열을 append하면 에러가 나온다.
insert함수를 이용해 항목을 원하는 위치에 추가할수있다.
x = np.array([ 7, 3, 5, 12, 2, 1])
세번째 자리에 100을 추가하자
in:
np.insert(x,2,100)
out:
array([ 7, 3, 100, 5, 12, 2, 1])
2차원 배열에 insert를 사용하자
in;
np.insert(X,1,a,axis= 0)
out:
array([[80, 50, 60, 81, 78],
[ 0, 1, 2, 3, 4],
[70, 46, 41, 2, 23],
[89, 87, 97, 91, 54],
[ 7, 1, 4, 60, 77]])
# 두번째 파라미터에 행,열의 인덱스를 넣어준다.
※ 열에 insert하려면 1차원 배열인 벡터를 넣어야 한다.
배열을 슬라이싱 하자
1차원 배열일때는 리스트를 슬라이싱 할때처럼 인덱스를 입력해주면 된다.
x = np.array([ 7, 3, 5, 12, 2, 1])
두번째에서 세번째 데이터를 가져오자
in:
x[1:4]
out:
array([ 3, 5, 12])
2차원 배열일때 슬라이싱 할때는 콜론' : '을 사용하자
X = np.array([
[80, 50, 60, 81, 78],
[70, 46, 41, 2, 23],
[89, 87, 97, 91, 54],
[ 7, 1, 4, 60, 77]])
세번째 행, 세번째 열 까지만 가져온다면
in:
X[0:3, 0:3]
out:
array([[80, 50, 60],
[70, 46, 41],
[89, 87, 97]])
두번째 행만 가져온다면
in:
X[1:2, :]
out:
array([[70, 46, 41, 2, 23]])
# 만약 세번째 열을 가져오려고 한다면 X[ : , 2:3]을 입력해면된다.
세번째 행 네번째 열에 있는 91을 100으로 바꾸고자 하면
X = np.array([
[80, 50, 60, 81, 78],
[70, 46, 41, 2, 23],
[89, 87, 97, 91, 54],
[ 7, 1, 4, 60, 77]])
in:
X[2,3] = 100
X
out:
array([[ 80, 50, 60, 81, 78],
[ 70, 46, 41, 2, 23],
[ 89, 87, 97, 100, 54],
[ 7, 1, 4, 60, 77]])
※ 다른 변수로 자른 배열을 지정하고 배열의 데이터를 변경하면 원본도 바뀐다.
따라서 원본을 유지하며 부분만 따로 바꾸려고 한다면 따로 복사 해야한다.
copy함수를 이용해 복사하자
in:
Z = X[0: 3, 0:2].copy()
Z[0,0] = 100
Z
out:
array([[100, 12],
[ 57, 81],
[ 52, 28]])
원하는 행, 열을 슬라이싱해서 가져오려고 할때
X = np.array([
[ 61, 12, 80, 61, 100],
[ 57, 81, 14, 8, 95],
[ 52, 28, 90, 69, 98],
[ 47, 66, 70, 57, 91]])
첫번째 행과 세번째 행만 가져오자
in:
X[[0,2],]
out:
array([[ 61, 12, 80, 61, 100],
[ 52, 28, 90, 69, 98]])
unique 함수로 중복된것을 제거한 값만 리스트로 가져올수있다.
x = np.array([ 1, 5, 3, 1, 40, 22, 33, 56, 12, 1, 5, 3])
in:
np.unique(x)
out:
array([ 1, 3, 5, 12, 22, 33, 40, 56])
boolean 연산
데이터 중에서 50보다 크고 80보다 작은 데이터만 가져오자
X = np.array([
[ 61, 12, 80, 61, 100],
[ 57, 81, 14, 8, 95],
[ 52, 28, 90, 69, 98],
[ 47, 66, 70, 57, 91]])
in:
X[(X > 50) & (X < 80)]
out:
array([61, 61, 57, 52, 69, 66, 70, 57])
# 배열에서는 and문을 쓸수 없다. 대신 앤퍼센트 '&'로 사용할수있다.
데이터 중에서 50보다 작거나 80보다 큰 데이터만 가져오자
in:
X[(X < 50) | (X > 80)]
out:
array([ 12, 100, 81, 14, 8, 95, 28, 90, 98, 47, 91])
# 배열에서는 or문도 쓸수 없다. 대신 세로줄 ' | '로 사용할수있다.
배열에 직접 계산을 하자
in:
X = np.array([[2, 6],[7, 5]])
Y = np.array([[63, 84],[63, 42]])
X+Y
out:
array([[65, 90],
[70, 47]])
# 같은 위치의 데이터끼리 연산되는것을 볼수있다.
배열에 직접 연산을 하자
in:
score = np.array([56, 75, 88, 92, 66])
score - 5
out:
array([51, 70, 83, 87, 61])
# 각열의 데이터가 5씩 마이너스된것을 확인할수 있다.
댓글