ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python 데이터분석 기초 3 - 배열 연산, 벡터 간 내적 연산, 파일 저장, 불러오기
    Python 데이터 분석 2022. 10. 28. 16:16

     

    # 배열 연산
    
    import numpy as np
    
    x = np.array([[1,2],[3,4]], dtype = np.float64) # 데이터 타입을 지정 가능
    print(x, x.dtype)
    
    y = np.arange(5, 9).reshape(2,2)
    y = y.astype(np.float32)
    print(y, y.dtype)
    
    print()
    print(x + y) # 행열 덧셈
    print(np.add(x,y)) # 같은 방법(속도가 더 빠르다)
    imsi = np.random.rand(1000000)
    print(imsi)
    print(sum(imsi))    # 파이썬의 함수(속도 느림)
    print(np.sum(imsi)) # numpy의 함수(속도 빠름)
    
    print()
    print(x - y)
    print(np.subtract(x,y)) # 같은 방법 -
    
    print()
    print(x * y)
    print(np.multiply(x,y)) # 같은 방법 *
    
    print()
    print(x / y)
    print(np.divide(x,y)) # 같은 방법 /
    
    
    print()
    # 벡터 간 내적 연산 : dot함수 사용(python), R에서는 %*% 사용했다.
    v = np.array([9, 10])
    w = np.array([11,12])
    print(v *w)
    print(v.dot(w)) # v[0] * w[0] + v[1] * w[1]
    print(np.dot(v,w)) # np 사용
    
    print()
    print(x) # 2차원
    print(v) # 1차원
    print(np.dot(x,v)) # x[0, 0] * v[0] + x[0, 1] * v[1] = 29, x[1, 0] * v[0] + x[1, 1] * v[1] = 67
    
    print()
    print(x) # 2차원
    print(y) # 2차원
    print(np.dot(x,y)) # x[0, 0] * y[0, 0] + x[0, 1] * y[1, 0] = 19, ...
    
    print('------------')
    print(np.sum(x))
    print(np.mean(x))
    print(np.cumsum(x))  # 누적합
    print(np.cumprod(x)) # 누적곱
    # ...
    
    print()
    name1 = np.array(['tom','james','tom','oscar'])
    name2 = np.array(['tom','page','john'])
    print(np.unique(name1))             # 중복 배제
    print(np.intersect1d(name1, name2)) # 교집합\
    print(np.intersect1d(name1, name2, assume_unique=True))  # 교집합, 중복 허용
    print(np.union1d(name1, name2))     # 합집합
    
    print('\nTranspose : 전치')
    print(x)
    print(x.T)
    print(x.transpose())
    print(x.swapaxes(0, 1))
    
    print('\nBroadcast 연산 : 크기가 다른 배열 간의 연산을 하면 작은 배열이 큰 배열의 크기를 자동으로 따라간다.')
    x = np.arange(1, 10).reshape(3, 3)
    print(x)
    y = np.array([1,0,1])
    print(x + y)
    
    print()
    print(x)
    np.savetxt('my.txt', x)     # 파일로 저장 가능하다.
    imsi = np.loadtxt('my.txt') # 저장된 파일을 불러온다.
    print(imsi)
    print()
    imsi2 = np.loadtxt('my2.txt', delimiter = ',') # 저장된 파일을 불러온다. ,로 분리해준다.
    print(imsi2)
    
    <console>
    [[1. 2.]
     [3. 4.]] float64
    [[5. 6.]
     [7. 8.]] float32
    
    [[ 6.  8.]
     [10. 12.]]
    [[ 6.  8.]
     [10. 12.]]
    [0.75608015 0.05434852 0.50819626 ... 0.81784943 0.93267389 0.87782032]
    499725.1706093457
    499725.1706093464
    
    [[-4. -4.]
     [-4. -4.]]
    [[-4. -4.]
     [-4. -4.]]
    
    [[ 5. 12.]
     [21. 32.]]
    [[ 5. 12.]
     [21. 32.]]
    
    [[0.2        0.33333333]
     [0.42857143 0.5       ]]
    [[0.2        0.33333333]
     [0.42857143 0.5       ]]
    
    [ 99 120]
    219
    219
    
    [[1. 2.]
     [3. 4.]]
    [ 9 10]
    [29. 67.]
    
    [[1. 2.]
     [3. 4.]]
    [[5. 6.]
     [7. 8.]]
    [[19. 22.]
     [43. 50.]]
    ------------
    10.0
    2.5
    [ 1.  3.  6. 10.]
    [ 1.  2.  6. 24.]
    
    ['james' 'oscar' 'tom']
    ['tom']
    ['tom' 'tom']
    ['james' 'john' 'oscar' 'page' 'tom']
    
    Transpose : 전치
    [[1. 2.]
     [3. 4.]]
    [[1. 3.]
     [2. 4.]]
    [[1. 3.]
     [2. 4.]]
    [[1. 3.]
     [2. 4.]]
    
    Broadcast 연산 : 크기가 다른 배열 간의 연산을 하면 작은 배열이 큰 배열의 크기를 자동으로 따라간다.
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    [[ 2  2  4]
     [ 5  5  7]
     [ 8  8 10]]
    
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    [[1. 2. 3.]
     [4. 5. 6.]
     [7. 8. 9.]]
    
    [[1. 2. 3.]
     [4. 5. 6.]]

    Numpy는 브로드캐스팅을 자동으로 적용시켜준다.

     

     

    브로드캐스팅(Broadcasting)은 모양이 다른 배열들 간의 연산이 어떤 조건을 만족했을 때 가능해지도록 배열을 자동적으로 변환하는 것이라고 정의할 수 있다. 그리고 누락되었거나 길이가 1인 차원에 대해 브로드캐스팅이 수행된다.
    위의 세 그림은 배열 연산에서 항상 1차원 배열이 포함되어 있다. 그리고 행/열의 어떤 축이든(;0번/1번 어떤 축이든) 차원의 길이가 같은 것을 알 수 있다. 3x3 + 1x3,  3x1 + 1x3
     
    브로드캐스팅이 일어날 수 있는 조건은 다음과 같다.
    1. 차원의 크기가 1일때 가능하다
      두 배열 간의 연산에서 최소한 하나의 배열의 차원이 1이라면(0번 축이든 1번 축이든; 1행이든 1열이든) 가능하다.
    2. 차원의 짝이 맞을 때 가능하다
      차원에 대해 축의 길이가 동일하면 브로드캐스팅이 가능하다.

    출처: https://sacko.tistory.com/16 [데이터 분석하는 문과생, 싸코:티스토리]

     

     

    댓글

Designed by Tistory.