ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Numpy] 넘파이 한번에 끝내기
    파이썬 2022. 4. 6. 11:10

    [Numpy] 넘파이 한번에 끝내기

    1. NumPy 특징

    2. 배열 생성

    3. 배열 조회

    4. 배열 값 삽입/수정/삭제/복사

    5. 배열 변환

    6. 배열 연산

    7. 배열 입출력

    ---------------------------------------

     

    1. NumPy 특징

    - Numerical Python의 약자

    - 고성능 과학 계산용 패키지로 강력한 N차원 배열 객체

    - 범용적 데이터 처리에 사용 가능한 다차원 컨테이너

    - 정교한 브로트캐스팅broadcasting 기능

    - 파이썬의 자료형 list와 비슷하지만, 더 빠르고 메모리를 효율적으로 관리

    - 반복문 없이 데이터 배열에 대한 처리를 지원하여 빠르고 편리

    - 데이터 과학 도구에 대한 생태계의 핵심을 이루고 있음

     

    2. 배열 생성

    (1) 리스트로 배열 만들기

    a1 = np.array([1,2,3,4,5])
    print(a1)
    print(type(a1))
    print(a1.shape)
    print(a1[0],a1[1],a1[2],a1[3],a1[4])
    
    a1[0] = 4
    a1[1] = 5
    a1[2] = 6
    print(a1)
    a2 = np.array([[1,2,3], [4,5,6], [7,8,9]])
    print(a2)
    print(type(a2))
    print(a2.shape)
    print(a2[0],a2[1],a2[2])
    print(a2[1][0],a2[1][1],a2[1][2])
    print(a2[1,0],a2[1,1],a2[1,2])
    a3 = np.array([[[1,2,3], [4,5,6],[7,8,9]],
                  [[10,11,12],[13,14,15], [16,17,18]],
                   [[19,20,21],[22,23,24],[25,26,27]]])
    print(a3)
    print(type(a3))
    print(a3.shape)
    print(a3[0,0,0],a3[1,1,1],a3[2,2,2])

    (2) 배열 생성 및 초기법

    - zeros(), ones(), full(), eye(), tri(), empty(), _like()

    np.zeros(10)
    np.ones((3,3))
    np.full((3,3), 1.23)
    np.eye(3)
    np.tri(3)
    np.empty(10)
    print(a1)
    np.zeros_like(a1)
    print(a2)
    np.ones_like(a2)
    print(a3)
    np.full_like(a3, 10)

     

    (3) 생성한 값으로 배열 생성

    - arange(), linspace(), logspace()

    np.arange(0,30,2)
    np.linspace(0, 30, 15)
    np.logspace(0.1, 1, 20)

     

    (4) 랜덤값으로 배열 생성

    함수 설명 인자
    seed 난수 발생을 위한 시드 지정  
    permutation 순서를 임의로 바꾸거나 임의의 순열 반환  
    shuffle 리스트나 배열의 순서를 뒤섞음  
    random 랜덤한 수의 배열 생성  
    rand 균등분포에서 표본 추출  
    randint 주어진 최소/최대 범위의 난수 추출  
    randn 표준편차가 1, 평균값 0인 정규분포의 표본 추출  
    binomial 이항분포에서 표본 추출  
    normal 정규분포(가우시안)에서 표본 추출  
    beta 베타분포에서 표본 추출  
    chisquare 카이제곱분포에서 표본 추출  
    gamma 감마분포에서 표본 추출  
    uniform 균등(0,1)분포에서 표본 추출  
    np.random.random((3,3))
    np.random.randint(0,10,(3,3))
    np.random.normal(0,1, (3,3))
    np.random.rand(3,3)
    np.random.randn(3,3)

     

    (5) 표준 데이터 타입

    함수 설명 인자
    bool_ 바이트로 저장된 블리언으로 True 또는 False를 가짐  
    int_ 기본 정수 타입  
    intc C언어에서 사용되는 int와 동일(일반적으로 int32 또는 int64)  
    intp 인덱싱에 사용되는 정수(C언어에서 ssize_t와 동일. 일반적으로int32 또는 int64)  
    int8 바이트 (-128~127)  
    int16 정수(-32768 ~ 32767)  
    int32 정수(-2147483648 ~ 2147483647)  
    int64 정수(-9223372036854775808 ~ 9223372036854775808)  
    uint8 부호없는 정수(0 ~ 255)  
    uint16 부호없는 정수(0 ~ 65535)  
    uint32 부호없는 정수(0 ~ 4294967295)  
    uint64 부호없는 정수(0 ~ 18446744073709551615)  
    float16 반정밀 부동소수점 : 부호비트, 5비트 지수, 10비트 가수  
    float32 단정밀 부동소수점 : 부호비트, 8비트 지수, 23비트 가수  
    float64 반정밀 부동소수점 : 부호비트, 11비트 지수, 52비트 가수  
    float_ float64를 줄여서 표현  
    complex64 복소수, 두 개의 32비트 부동소수점으로 표현  
    complex128 복소수, 두 개의 64비트 부동소수점으로 표현  
    complex_ complex128을 줄여서 표현  
         
    np.zeros(20, dtype=int)
    np.ones((3,3), dtype=bool)
    np.full((3,3), 1.0, dtype=float)

    (6) 날짜/시간 배열 생성

    코드 의미 상대적 시간 범위 절대적 시간 범위
    Y ±9.2e18년 [9.2e18 BC, 9.2e18 AD]
    M ±7.6e17년 [7.6e17 BC, 7.6e17 AD]
    W ±1.7e17년 [1.7e17 BC, 1.7e17 AD]
    D ±2.5e16년 [2.5e16 BC, 9.2e16 AD]
    h ±1.0e15년 [1.0e15 BC, 1.0e15 AD]
    m ±1.7e13년 [1.7e13 BC, 1.7e13 AD]
    s ±2.9e12년 [2.9e9 BC, 2.9e9 AD]
    ms 밀리초 ±2.9e9년 [2.9e6 BC, 2.9e6 AD]
    us 마이크로초 ±2.9e6년 [290301 BC, 294241 AD]
    ns 나노초 ±292년 [1678 BC, 2262 AD
    ps 피코초 ±106년 [1969 BC, 1969 AD]
    fs 펨토초 ±2.6시간 [1969 BC, 1969 AD]
    as 아토초 ±9.2초 [1969 BC, 1969 AD]
           
    date = np.array('2020-01-01', dtype=np.datetime64)
    date
    date + np.arange(10)
    datetime = np.datetime64('2022-04-05 13:55')
    datetime
    datetime = np.datetime64('2022-04-05 13:55:14.56', 'ns')
    datetime

     

    3. 배열 조회

    (1) 배열 속성 정보

    def array_info(array):
        print(array)
        print(f'ndim: {array.ndim}')
        print(f'shape: {array.shape}')
        print(f'dtype: {array.dtype}')
        print(f'size: {array.size}')
        print(f'itemsize: {array.itemsize}')
        print(f'nbytes: {array.nbytes}')
        print(f'strides: {array.strides}')
    array_info(a1)  # 1차원
    array_info(a2)  # 2차원
    array_info(a3)  # 3차원

    (2) 인덱싱

    print(a1)
    print(a1[0])
    print(a1[2])
    print(a1[-1])
    print(a1[-2])
    print(a2)
    print(a2[0,0])
    print(a2[2,2])
    print(a2[-1,1])
    print(a2[-2,2])
    print(a3)
    print(a3[0,0,0])
    print(a3[2,2,1])
    print(a3[-1,1,1])
    print(a3[-2,2,2])

    (3) 슬라이싱

    - 슬라이싱 구문 : a[start:stop:step]

    - 기본값 : start(0), stop(ndim), step(1)

    print(a1)
    print(a1[0:3])
    print(a1[0:])
    print(a1[:1])
    print(a1[::2])
    print(a1[::-1])
    print(a2)
    print(a2[1])
    print(a2[1, :-1])
    print(a2[:2, :2])
    print(a2[1:, ::-1])
    print(a2[::-1, ::-1])

    (4) 불리언 인덱싱

    - 배열 각 요소의 선택 여부를 불리언(True/False)로 지정

    - True값인 인덱스의 값만 조회

    print(a1)
    bi = [False, True, True, False, True]
    print(a1[bi])
    bi = [True, False, True, True, False]
    print(a1[bi])
    print(a2)
    bi = np.random.randint(0,2,(3,3),dtype=bool)
    print(bi)
    print(a2[bi])

    (5) 팬시 인덱싱

    print(a1)
    print([a1[0],a1[2]])
    ind = [0,2]
    print(a1[ind])
    
    ind = np.array([[0, 1],
                    [2, 0]])
    print(ind)
    print(a1[ind])
    print(a2)
    row = np.array([0,2])
    col = np.array([1,2])
    print(a2[row,col])
    print(a2[row, :])
    print(a2[:, col])
    print(a2[row,1])
    print(a2[2,col])
    print(a2[row,1:])
    print(a2[1:, col])

     

    4. 배열 값 삽입/수정/삭제/복사

    (1) 배열 값 삽입

    - insert() : 배열의 특정 위치에 값 삽입

    - axis를 지정하지 않으면 1차원 배열로 변환

    - 추가할 방향을 axis로 지정

    - 원본 배열 변경없이 새로운 배열 반환

    print(a1)
    b1 = np.insert(a1, 0, 10)
    print(b1)
    c1 = np.insert(a1, 2, 10)
    print(c1)
    print(a2)
    b2 = np.insert(a2, 1, 10, axis=0)
    print(b2)
    c2 = np.insert(a2, 1, 10, axis=1)
    print(c2)

    (2) 배열 값 수정

    - 배열의 인덱싱으로 접근하여 값 수정

    print(a1) 
    a1[0] = 1
    a1[1] = 2
    a1[2] = 3
    print(a1)
    a1[:2] = 9
    print(a1)
    i = np.array([1,3,4])
    a1[i] = 0
    print(a1)
    a1[i] += 4
    print(a1)
    print(a2)
    a2[0,0] = 1
    a2[1,1] = 2
    a2[2,2] = 3
    a2[0] = 1
    print(a2)
    a2[1:, 2] = 9
    print(a2)
    row = np.array([0, 1])  # 팬시 인덱싱
    col = np.array([1, 2])
    a2[row,col] = 0
    print(a2)
    print(a2)
    a2[1,0] = 1
    a2[1,1] = 2
    a2[1,2] = 3
    print(a2)
    a2[2,:2] = 9
    print(a2)
    row = np.array([])

    (3) 배열 값 삭제

    - delete() : 배열의 특정 위치에 값 삭제

    - axis를 지정하지 않으면 1차원 배열로 변환

    - 삭제할 방향을 axis로 지정

    - 원본 배열 변경없이 새로운 배열 반환

    print(a1)
    b1 = np.delete(a1, 1)
    print(b1)
    print(a1)
    print(a2)
    b2 = np.delete(a2, 1, axis=0)
    c2 = np.delete(a2, 1, axis=1)
    print(b2)
    print(c2)
    print(a2)

    (4) 배열 복사

    - 리스트 자료형과 달리 배열의 슬라이스는 복사본이 아님

    print(a2)
    print(a2[:2, :2])
    a2_sub = a2[:2, :2]
    print(a2_sub)
    a2_sub[:, 1] = 0
    print(a2_sub)
    print(a2)

    - copy(): 배열이나 하위 배열 내의 값을 명시적으로 복사

    print(a2)
    a2_sub_copy = a2[:2, :2].copy()
    print(a2_sub_copy)
    a2_sub_copy[:,1] = 2
    print(a2_sub_copy)
    print(a2)

     

    5. 배열 변환

    구분 함수 설명 인자
    배열 전치 .T 전치 메소드 없음
    배열 축 변경 swapaxis 축 변경 array_like, axis1, axis2
    배열 재구조화 reshape 배열의 형상 변경 array_like, nwe_shape, order
    newaxis 새로운 축 추가 없음
    배열 크기 변경 resize 배열 크기 변경 array_like, nwe_shape, refcheck
    배열 추가 append 배열의 끝에 값 추가 array_like, values, axis
    배열 연결 concatenate 튜플이나 배열의 리스트를 인수로 사용해 배열 연결 array_like, axis
    vstack 수직 스택, 1차원으로 연결 array_like, axis
    hstack 수평 스택, 2차원으로 연결 array_like, axis
    dstack 깊이 스택, 3차원으로 연결 array_like, axis
    stack 새로운 차원으로 연결 array_like, axis
    배열 분할 split 배열 분할 array_like, indices_or_sections, axis
    vsplit 수직 분할, 1차원으로 분할 array_like, indices_or_sections, axis
    hsplit 수평 분할, 2차원으로 분할 array_like, indices_or_sections, axis
    dsplit 깊이 분할, 3차원으로 분할 array_like, indices_or_sections, axis

    (1) 배열 전치 및 축 변경

    print(a2)
    print(a2.T)
    print("원본 배열\n",a3)
    print("\n\n전치 배열\n",a3.T)
    print(a2)
    print(a2.swapaxes(1, 0))
    print(a3)
    print("\n\n전치 배열\n",a3.swapaxes(0, 1))
    print("\n\n전치 배열\n",a3.swapaxes(1, 2))

    (2) 배열 재구조화

    n1 = np.arange(1,10)
    print(n1)
    print(n1.reshape(3,3))
    print(n1)
    print(n1[np.newaxis, :5])
    print(n1[:5, np.newaxis])

    (3) 배열 크기 변경

    n2 = np.random.randint(0,10,(2,5))
    print(n2)
    n2.resize((5,2))
    print(n2)
    n2.resize((5, 5), refcheck=False)
    print(n2)
    n2.resize((3,3), refcheck=False)
    print(n2)

    (4) 배열 추가

    a2 = np.arange(1,10).reshape(3,3)
    print(a2)
    b2 = np.arange(10,19).reshape(3,3)
    print(b2)
    c2 = np.append(a2, b2)
    print(c2)
    c2 = np.append(a2, b2, axis=0)
    print(c2)
    c2 = np.append(a2, b2, axis=1)
    print(c2)

    (5) 배열 연결

    a1 = np.array([1,2,3])
    b1 = np.array([4,5,6])
    np.concatenate([a1, b1])
    c1 = np.array([7,8,9])
    np.concatenate([a1, b1, c1])
    a2 = np.array([[1,2,3],
                   [4,5,6]])
    np.concatenate([a2,a2])
    a2 = np.array([[1,2,3],
                   [4,5,6]])
    np.concatenate([a2,a2], axis=1)
    np.vstack([a2,a2])
    np.hstack([a2,a2])
    np.dstack([a2,a2])
    np.stack([a2,a2])

    (6) 배열 분할

    a1 = np.arange(0,10)
    print(a1)
    b1, c1 = np.split(a1, [5])
    print(b1,c1)
    b1, c1, d1, e1, f1 = np.split(a1, [2,4,6,8])
    print(b1,c1,d1, e1, f1)
    a2 = np.arange(1,10).reshape(3,3)
    print(a2)
    b2, c2 = np.vsplit(a2, [2])
    print(b2)
    print(c2)
    a2 = np.arange(1,10).reshape(3,3)
    print(a2)
    b2, c2 = np.hsplit(a2, [2])
    print(b2)
    print(c2)
    a3 = np.arange(1,28).reshape(3,3,3)
    print(a3)
    b3, c3 = np.dsplit(a3, [2])
    print(b3)
    print(c3)

     

    6. 배열 연산

    - NumPy의 배열 연산은 벡터화(vectorized) 연산을 사용

    - 일반적으로 NumPy의 범용 함수(universal functions)를 통해 구현

    - 배열 요소에 대한 반복적인 계산을 효율적으로 수행

    (1) 브로드캐스팅Broadcasting

    a1 = np.array([1,2,3])
    print(a1)
    print(a1 + 5)
    
    a2 = np.arange(1,10).reshape(3,3)
    print(a2)
    print(a1 + a2)
    
    b2 = np.array([1,2,3]).reshape(3,1)
    print(b2)
    print(a1 + b2)

    (2) 산술 연산

    연산자 범용 함수 설명
    + np.add 덧셈
    - np.subtract 뺄셈
    - np.negative 단항 음수
    * np.multiply 급셈
    / np.divide 나눗셈
    // np.floor_divide 나눗셈 내림
    ** np.power 지수 연산
    % np.mod 나머지 연산
    a1 = np.arange(1, 10)
    print(a1)
    print(a1 + 1)
    print(np.add(a1, 10))
    print(a1 - 2)
    print(np.subtract(a1, 10))
    print(-a1)
    print(np.negative(a1))
    print(a1 * 2)
    print(np.multiply(a1, 2))
    print(a1 / 2)
    print(np.divide(a1, 2))
    print(a1 // 2)
    print(np.floor_divide(a1, 2))
    print(a1 ** 2)
    print(np.power(a1,2))
    print(a1 % 2)
    print(np.mod(a1,2))
    구분 함수 설명
    절대값 np.absolute, np.abs 내장된 절대값 함수
    제곱/ np.square 제곱 함수
    제곱근 np.sqrt 제곱근 함수
    지수함수 np.exp 자연상수의 지수함수
    np.exp2 2의 지수함수
    np.power 지수함수. 인자 (x, a) x(밑) a(지수)
    로그 np.log 자연상수의 로그함수
    np.log2 2의 로그함수
    np.log10 10의 로그함수
    a1 = np.arange(1,10)
    print(a1)
    b1 = np.random.randint(1,10,size=9)
    print(b1)
    print(a1 + b1)
    print(a1 - b1)
    print(a1 * b1)
    print(a1 / b1)
    print(a1 // b1)
    print(a1 % b1)
    a2 = np.arange(1,10).reshape(3,3)
    print(a2)
    b2 = np.random.randint(1,10,(3,3))
    print(b2)
    
    print(np.add(a2,b2))
    print(np.subtract(a2,b2))
    print(np.multiply(a2,b2))
    print(np.divide(a2,b2))
    print(np.floor_divide(a2,b2))
    print(np.power(a2,b2))
    a1 = np.random.randint(-10, 10, size=5)
    print(a1)
    print(np.absolute(a1))
    print(np.abs(a1))
    print(a1)
    print(np.square(a1))
    print(np.sqrt(a1))
    a1 = np.random.randint(1,10,size=5)
    print(a1)
    print(np.exp(a1))
    print(np.exp2(a1))
    print(np.power(a1, 2))
    구분 함수 설명
    삼각함수 np.sin(array) 요소별 사인
    np.cos(array) 요소별 코사인
    np.tan(array) 요소별 탄젠트
    np.arcsin(array) 요소별 아크 사인
    np.arccos(array) 요소별 아크 코사인
    np.arctan(array) 요소별 아크 탄젠트
    np.arctan2(array1, array2) 요소별 아크 탄젠트 array1/array2
    np.sinh(array) 요소별 하아퍼블릭 사인
    np.cosh(array) 요소별 하아퍼블릭 코사인
    np.tanh(array) 요소별 하아퍼블릭 탄젠트
    np.arcsinh(array) 요소별 하이퍼블릭 아크 사인
    np.arccosh(array) 요소별 하이퍼블릭 아크 코사인
    np.arctanh(array) 요소별 하이퍼블릭 아크 탄젠트
    np.deg2rad(array) 요소별 각도에서 라디안 변환
    np.rad2deg(array) 요소별 라디안에서 각도 변환
    t = np.linspace(0, np.pi, 3)
    print(t)
    print(np.sin(t))
    print(np.cos(t))
    print(np.tan(t))
    x = [-1, 0, 1]
    print(x)
    print(np.arcsin(x))
    print(np.arccos(x))
    print(np.arctan(x))

    (3) 집계 함수

    함수 NaN 안전모드 설명
    np.sum np.nansum 요소의 합 
    np.cumsum np.nancumsum 요소의 누적 합
    np.diff N/A 요소의 차분
    np.prod np.nanprod 요소의 곱
    np.cumprod np.nancumprod 요소의 누적 곱
    np.dot N/A 점 곱(dot product)
    np.matmul N/A 행렬 곱
    np.tensordot N/A 텐서곱(tensor product)
    np.cross N/A 벡터 곱
    np.inner N/A 벡터 내적
    np.outer N/A 벡터 외적
    np.mean np.nanmean 요소의 평균 계산
    np.std np.nanstd 표준편차 계산
    np.var np.nanvar 분산
    np.min np.nanmin 최소값
    np.max np.nanmax 최대값
    np.argmin np.nanargmin 최소값 인덱스
    np.argmax np.nanargmax 최대값 인덱스
    np.median np.nanmedian 중앙값
    np.percentile np.nanpercentile 요소의 순위 기반 백분위 수 계산
    np.any N/A 요소 중 참이 있는지 평가
    np.all N/A 모든 요소가 참인지 평가
    a2 = np.random.randint(1, 10, size=(3,3))
    print(a2)
    print(a2.sum(), np.sum(a2))
    print(a2.sum(axis=0), np.sum(a2, axis=0))
    print(a2.sum(axis=1), np.sum(a2, axis=1))
    a2 = np.random.randint(1, 10, size=(3,3))
    print(a2)
    print(np.cumsum(a2))
    print(np.cumsum(a2, axis=0))
    print(np.cumsum(a2, axis=1))
    a2 = np.random.randint(1, 10, size=(3,3))
    print(a2)
    print(np.diff(a2))
    print(np.diff(a2, axis=0))
    print(np.diff(a2, axis=1))
    a2 = np.random.randint(1, 10, size=(3,3))
    print(a2)
    print(np.prod(a2))
    print(np.prod(a2, axis=0))
    print(np.prod(a2, axis=1))
    a2 = np.random.randint(1, 10, size=(3,3))
    print(a2)
    print(np.cumprod(a2))
    print(np.cumprod(a2, axis=0))
    print(np.cumprod(a2, axis=1))
    print(a2)
    b2 = np.ones_like(a2)
    print(b2)
    print(np.dot(a2, b2))
    print(np.matmul(a2, b2))
    print(a2)
    print(b2)
    print(np.tensordot(a2, b2))
    print(np.tensordot(a2, b2, axes=0))
    print(np.tensordot(a2, b2, axes=1))
    x = [1,2,3]
    y = [4,5,6]
    print(np.cross(x, y))
    print(a2)
    print(b2)
    print(np.inner(a2, b2))
    print(np.outer(a2, b2))
    print(a2)
    print(np.mean(a2))
    print(np.mean(a2, axis=0))
    print(np.mean(a2, axis=1))
    print(a2)
    print(np.std(a2))
    print(np.std(a2, axis=0))
    print(np.std(a2, axis=1))
    print(a2)
    print(np.var(a2))
    print(np.var(a2, axis=0))
    print(np.var(a2, axis=1))
    print(a2)
    print(np.min(a2))
    print(np.min(a2, axis=0))
    print(np.min(a2, axis=1))
    print(a2)
    print(np.max(a2))
    print(np.max(a2, axis=0))
    print(np.max(a2, axis=1))
    print(a2)
    print(np.argmin(a2))
    print(np.argmin(a2, axis=0))
    print(np.argmin(a2, axis=1))
    print(a2)
    print(np.argmax(a2))
    print(np.argmax(a2, axis=0))
    print(np.argmax(a2, axis=1))
    print(a2)
    print(np.median(a2))
    print(np.median(a2, axis=0))
    print(np.median(a2, axis=1))
    a1 = np.array([0,1,2,3])
    print(a1)
    print(np.percentile(a1, [0, 20, 40, 60, 80, 100], interpolation='linear'))
    print(np.percentile(a1, [0, 20, 40, 60, 80, 100], interpolation='higher'))
    print(np.percentile(a1, [0, 20, 40, 60, 80, 100], interpolation='lower'))
    print(np.percentile(a1, [0, 20, 40, 60, 80, 100], interpolation='nearest'))
    print(np.percentile(a1, [0, 20, 40, 60, 80, 100], interpolation='midpoint'))
    a2 = np.array([[False, False, False],
                   [False, True, True],
                   [False, True, True]])
    print(a2)
    print(np.any(a2))
    print(np.any(a2, axis=0))
    print(np.any(a2, axis=1))
    a2 = np.array([[False, False, True],
                   [True, True, True],
                   [False, True, True]])
    print(a2)
    print(np.all(a2))
    print(np.all(a2, axis=0))
    print(np.all(a2, axis=1))

    (4) 비교 연산

    연산자 비교 범용 함수 설명
    == np.equal  
    != np.not_equal  
    < np.less  
    <= np.less_equal  
    > np.greater  
    >= np.greater_equal  
    비교 범용 함수 설명
    np.isclose 배열 두 개가 (z*1e+02)% 내외로 가까우면 True, 아니면 False
    np.isinf 배열이 inf이면 True, 아니면 False
    np.isfinite 배열이 inf, nan이면 False, 아니면 False
    np.isnan 배열이 nan이면 True, 아니면 False
    a1 = np.arange(1, 10)
    print(a1)
    print(a1 == 5)
    print(a1 != 5)
    print(a1 < 5)
    print(a1 <= 5)
    print(a1 > 5)
    print(a1 >= 5)
    a2 = np.arange(1,10).reshape(3,3)
    print(a2)
    print(np.sum(a2))
    print(np.count_nonzero(a2 > 5))
    print(np.sum(a2 > 5))
    print(np.sum(a2 > 5, axis=0))
    print(np.sum(a2 > 5, axis=1))
    print(np.any(a2 > 5))
    print(np.any(a2 > 5, axis=0))
    print(np.any(a2 > 5, axis=1))
    print(np.all(a2 > 5))
    print(np.all(a2 > 5, axis=0))
    print(np.all(a2 > 5, axis=1))
    a1 = np.array([1,2,3,4,5])
    print(a1)
    b1 = np.array([1,2,3,3,4])
    print(b1)
    print(np.isclose(a1, b1))
    a1 = np.array([np.nan, 2, np.inf, 4, np.NINF])
    print(a1)
    print(np.isnan(a1))
    print(np.isinf(a1))
    print(np.isfinite(a1))
    연산자 비교 범용 함수 설명
    & np.bitwise_and  
    | np.bitwise_or  
    ^ np.bitwise_xor  
    ~ np.bitwise_not  
    a2 = np.arange(1,10).reshape(3,3)
    print(a2)
    
    print((a2 > 5) & (a2 < 8))
    print(a2[(a2 > 5) & (a2 < 8)])
    
    print((a2 > 5) | (a2 < 8))
    print(a2[(a2 > 5) | (a2 < 8)])
    
    print((a2 > 5) ^ (a2 < 8))
    print(a2[(a2 > 5) ^ (a2 < 8)])
    
    print((a2 > 5) & (a2 < 8))
    print(a2[(a2 > 5) & (a2 < 8)])
    
    print(~(a2 > 5))
    print(a2[~(a2 > 5)])

    (5) 배열 정렬 sort

    함수 설명 인자
    np.sort 배열을 정렬 array_like, axis
    np.argsort 배열을 정열하였을 때 인덱스 반환 array_like, axis
    np.partition 배열에서 k개의 작은 값을 반환 array_like, k, axis
    a1 = np.random.randint(1,10,size=10)
    print(a1)
    print(np.sort(a1))
    print(a1)
    print(np.argsort(a1))
    print(a1)
    print(a1.sort())
    print(a1)
    a2 = np.random.randint(1,10, size=(3,3))
    print(a2)
    print(np.sort(a2, axis=0))
    print(np.sort(a2, axis=1))
    a1 = np.random.randint(1,10, size=10)
    print(a1)
    print(np.partition(a1, 3))
    a2 = np.random.randint(1,10,size=(5,5))
    print(a2)
    print(np.partition(a2, 3))
    print(np.partition(a2, 3, axis=0))
    print(np.partition(a2, 3, axis=1))

     

    7. 배열 입출력

    함수 설명 파일종류 인자
    np.save NumPy 배열 객체 1개를 파일에 저장 바이너리 file_name, array
    np.savez NumPy 배열 객체 여러 개를 파일에 저장 바이너리 file_name, arrays
    np.load NumPy 배열 저장 파일로부터 객체 로딩 바이너리 file_name
    np.loadtxt 텍스트 파일로부터 배열 로딩 텍스트  
    np.savetxt 텍스트 파일에 NumPy배열 객체 저장 텍스트  
    a2 = np.random.randint(1,10, size=(3,3))
    print(a2)
    np.save("a", a2)
    b2 = np.random.randint(1,10, size=(3,3))
    print(b2)
    np.savez("ab", a2, b2)
    npy = np.load("a.npy")
    print(npy)
    npz = np.load("ab.npz")
    print(npz.files)
    print(npz['arr_1'])
    print(a2)
    np.savetxt("a.csv", a2, delimiter=',')
    csv = np.loadtxt("a.csv", delimiter=',')
    print(csv)
    print(b2)
    np.savetxt("b.csv", b2, delimiter=',', fmt='%.2e', header='c1,c2,c3')
    csv = np.loadtxt("b.csv", delimiter=',')
    print(csv)

     

    '파이썬' 카테고리의 다른 글

    [파이썬]09. 모듈과 패키지  (0) 2022.03.31
    [파이썬]08. 객체와 클래스  (0) 2022.03.30
    [파이썬]07. 함수  (0) 2022.03.29
    [파이썬]06. 입력과 출력  (0) 2022.03.28
    [파이썬]03. 문자열  (0) 2022.03.27
Designed by Tistory.