Home [Python] Numpy 기본 문법
Post
Cancel

[Python] Numpy 기본 문법

Numpy

  • python에서 벡터,행렬등 수치 연산을 수행하는 선형대수(Linear algebra) 라이브러리
  • 내부적으로 C로 구현되었으며 연산이 빠르다.
  • N차원 배열(array)객체이며 모든 배열의 값이 기본적으로 같은 타입이어야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
import numpy as np
import numpy.random as np

a = np.arrange(15).reshape(3,5)
print(a)

# [[ 0  1  2  3  4]
#  [ 5  6  7  8  9]
#  [10 11 12 13 14]]

3 5열의 array

numpy.ndarray 의 대표적인 속성값

  • ndarray.shape : 배열의 각 축(axis)의 크기
  • ndarray.ndim : 축의 갯수(Dimension)
  • ndarray.dtype : 각 요소(Element)의 타입
  • ndarray.itemsize : 각 요소(Element)의 타입의 bytes 크기
  • ndarray.size : 전체 요소(Element)의 개수

배열 생성 - array creation

  • a = np.array( [2, 3, 4] )
  • np.zeros(shape) : 0으로 구성된 N차원 배열 생성
  • np.ones(shape) : 1로 구성된 N차원 배열 생성
  • np.empty(shape) : 초기화되지 않은 N차원 배열 생성

np.arrange() 와 np.linspace()를 이용하여 연속적인 데이터 생성

  • np.arange() : N 만큼 차이나는 숫자 생성
  • np.linspace() : N 등분한 숫자 생성
1
2
3
4
5
6
7
8
9
10
11
12
13
# 10이상 30미만까지 5씩 차이나는 배열 생성
print(np.arrange(10,30,5))
[10 15 20 25]

# 0 ~ 99 까지 100등분
x = np.linspace(0, 99, 100)
print(x)
# [ 0.  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. 28. 29. 30. 31. 32. 33. 34. 35.
#  36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53.
#  54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71.
#  72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89.
#  90. 91. 92. 93. 94. 95. 96. 97. 98. 99.]

배열 출력 - print arrays

3D 배열은 2차원 배열이 N개 출력되는 형식으로 나타남

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
b = np.arange(12).reshape(4,3)
print(b)
# [[ 0  1  2]
#  [ 3  4  5]
#  [ 6  7  8]
#  [ 9 10 11]]

c = np.arange(24).reshape(2,3,4)
print(c)
# [[[ 0  1  2  3]
#   [ 4  5  6  7]
#   [ 8  9 10 11]]
#
#  [[12 13 14 15]
#   [16 17 18 19]
#   [20 21 22 23]]]

# reshape()을 통해 데이터는 유지한채 차원만 변경가능
# [10000] 배열을 [100, 100] 배열로 변경
np.arange(10000).reshape(100,100)

Numpy 연산

numpy에서 수치연산은 기본적으로 숫자 각각의 요소에 연산 적용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
a = np.array( [20,30,40,50] )
b = np.arange( 4 )
print(b)
# [0 1 2 3]

# a에서 b에 각각의 원소를 -연산
c = a-b
print(c)
# [20 29 38 47]

# b 각각의 원소에 제곱 연산
print(b**2)
# [0 1 4 9]

# a 각각의 원소에 *10 연산
print(10*np.sin(a))
# [ 9.12945251 -9.88031624  7.4511316  -2.62374854]

# a 각각의 원소가 35보다 작은지 Boolean 결과
print(a<35)
# [ True  True False False]

2차원 배열을 행렬이라고 볼때, 여러가지 곱셈법

    • : 각각의 원소끼리 곱셈
  • @ : 행렬 곱셈
  • .dot() : 행렬 내적

numpy 내장함수

.sum(): 모든 요소의 합 .min(): 모든 요소 중 최소값 .max(): 모든 요소 중 최대값 .argmax(): 모든 요소 중 최대값의 인덱스 .cumsum(): 모든 요소의 누적합

Numpy 차원 변경 함수


broadcasting rules

numpy에서 array 연산시 편리성을 위해 shape가 다른 np.array끼리 연산을 지원해주기 위한 기법

1
2
3
4
5
6
np.array([1,2,3,4,5]) * 2
# 결과
# [2,4,6,8,10]

#내부적 수행 과정
# → np.array([1,2,3,4,5]) * np.array([2,2,2,2,2])

차원(ndim)이 같고, 각 축(axis)의 값이 같거나 1일 경우 연산이 가능

1
2
3
4
5
6
7
8
9
10
11
12
print(np.arange(4) * 2)
# [0 2 4 6]

print(np.ones((3,4)) * np.arange(4))
# [[0. 1. 2. 3.]
#  [0. 1. 2. 3.]
#  [0. 1. 2. 3.]]

print(np.arange(3).reshape((3,1)) * np.arange(3))
# [[0 0 0]
#  [0 1 2]
#  [0 2 4]]

Numpy-공식문서

This post is licensed under CC BY 4.0 by the author.