Skip to content

Commit d2d7377

Browse files
nainsysgitbook-bot
authored andcommitted
GitBook: [master] 6 pages modified
1 parent a383233 commit d2d7377

File tree

6 files changed

+222
-3
lines changed

6 files changed

+222
-3
lines changed

Diff for: 4.-numpy-and-scipy/4.1-numpy.md

-2
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# 3.13.3. Shape Manipulation
2+
3+
배열은 각 축을 따라 요소 수만큼 주어진 모양을 가진다. 배열의 모양은 다양한 명령으로 변경할 수 있습니다. 다음 세 명령은 모두 수정된 배열을 반환하지만 원래 배열은 변경하지 않는다.
4+
5+
```python
6+
import numpy as np
7+
8+
a = np.floor(10*np.random.random((3,4)))
9+
print("3행 4열 배열 생성\n", a)
10+
print("a 배열의 shape = ",a.shape)
11+
12+
print("a.ravel 결과값\n",a.ravel()) # returns the array, flattened
13+
print("a.reshape(6,2) 결과값\n",a.reshape(6,2)) # returns the array with a modified shape
14+
print("a.T 결과값\n",a.T) # returns the array, transposed
15+
print("a.T.shape 결과값 = ",a.T.shape)
16+
print("a.shape 결과값 = ",a.shape)
17+
```
18+
19+
위의 코드를 수행 하면 다음과 같은 결과를 출력합니다.
20+
21+
```text
22+
3행 4열 배열 생성
23+
[[8. 0. 1. 7.]
24+
[9. 2. 6. 1.]
25+
[9. 9. 3. 5.]]
26+
a 배열의 shape = (3, 4)
27+
a.ravel 결과값
28+
[8. 0. 1. 7. 9. 2. 6. 1. 9. 9. 3. 5.]
29+
a.reshape(6,2) 결과값
30+
[[8. 0.]
31+
[1. 7.]
32+
[9. 2.]
33+
[6. 1.]
34+
[9. 9.]
35+
[3. 5.]]
36+
a.T 결과값
37+
[[8. 9. 9.]
38+
[0. 2. 9.]
39+
[1. 6. 3.]
40+
[7. 1. 5.]]
41+
a.T.shape 결과값 = (4, 3)
42+
a.shape 결과값 = (3, 4)
43+
```
44+
45+
np.random.random은 0 ~ 1 사이의 균등 분포로 표본을 추출합니다. np.floor 함수로 최대 정수로 변환합니다. 따라서 a = np.floor\(10\*np.random.random\(\(3,4\)\)\) 코드에 의해 3행 4열의 1에서 10사의의 값을 갖는 랜덤 정수 배열이 생성 됩니다.
46+
47+
ravel 함수는 다차원 배열\(array\)을 1차원 배열로 평평하게 펴주는 함수입니다. 배열의 차원\(Dimension\)을 재구조화, 변경하고자 할 때 reshape\(\) 메소드를 사용합니다. 가령, 3개의 행과 4개의 열로 구성된 2차원의 배열로 재설정하고 싶으면 reshape\(3, 4\)처럼 사용하면 됩니다.
48+
49+
T 함수는 각 요소들을 행, 열을 바꾸는 전치\(transpose\)를 수행합니다.
50+
+56
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# 4.1.1. Basic Operations
2+
3+
배열의 산술 연산자는 새 배열이 만들어지고 그 결과로 채워집니다.
4+
5+
다음의 코드로 NumPy 연산을 설명해 보겠습니다
6+
7+
```python
8+
import numpy as np
9+
10+
a = np.array( [20,30,40,50] )
11+
b = np.arange( 4 )
12+
print("arrange로 생성한 b",b)
13+
c = a-b
14+
print("c=a-b 의 결과값",c)
15+
print("b**2 의 결과값",b**2)
16+
print("a의 sine값 * 10 의 결과값",10*np.sin(a))
17+
print("a가 35보다 작은지에 대한 비교 결과",a<35)
18+
19+
AA = np.array( [[1,1],
20+
[0,1]] )
21+
BB = np.array( [[2,0],
22+
[3,4]] )
23+
print("AA * BB 의 결과값\n",AA * BB)
24+
print("AA @ BB 의 결과값\n",AA @ BB)
25+
print("AA.dot(BB) 의 결과값\n",AA.dot(BB))
26+
```
27+
28+
위 코드의 실행 결과는 다음과 같습니다.
29+
30+
```text
31+
arrange로 생성한 b [0 1 2 3]
32+
c=a-b 의 결과값 [20 29 38 47]
33+
b**2 의 결과값 [0 1 4 9]
34+
a의 sine값 * 10 의 결과값 [ 9.12945251 -9.88031624 7.4511316 -2.62374854]
35+
a가 35보다 작은지에 대한 비교 결과 [ True True False False]
36+
AA * BB 의 결과값
37+
[[2 0]
38+
[0 4]]
39+
AA @ BB 의 결과값
40+
[[5 4]
41+
[3 4]]
42+
AA.dot(BB) 의 결과값
43+
[[5 4]
44+
[3 4]]
45+
```
46+
47+
a = np.array\( \[20,30,40,50\] \) 1차원 배열로 NumPy 배열을 생성하여 그 이름을 a로 칭합니다.
48+
49+
numpy.arange\(\[start,\] stop\[, step,\], dtype=None\) 함수는 start부터 stop 미만까지 step 간격으로 데이터 생성한 후 배열을 만드는 함수입니다. 따라서 b=np.arrange\(4\) 는 자동으로 \[0 1 2 3\] 라는 1차원 배열로 데이터가 존재하는 NumPy 배열을 생성합니다.
50+
51+
c=a-b , b\*\*2 등 연산의 결과는 각각의 배열 값에 해당 연산을 한 것으로 계산하여 출력됩니다. \*는 행렬곱이 아니라 요소별 곱셈입니다.
52+
53+
벡터의 내적이나 매트릭스의 벡터 곱이나, 메트릭스 곱을 계산하기 위해 @ 혹은 dot 함수를 사용합니다. matrix multiplication에 대해서는 별도로 학습하기 바란다.
54+
55+
AA.dot\(BB\) 메트릭스 곱은 AA\[0,0\]\*BB\[0,0\]+AA\[0,1\]\*BB\[1,0\]=5, AA\[0,0\]\*BB\[0,1\]+AA\[0,1\]\*BB\[1,1\]=4, AA\[1,0\]\*BB\[0,1\]+AA\[1,1\]\*BB\[1,1\]=3, AA\[1,0\]\*BB\[0,1\]+AA\[1,1\]\*BB\[1,1\]=4 가 나옵니다.
56+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# 4.1.2. Indexing, Slicing 그리고 Iterating
2+
3+
1 차원 배열은 리스트 및 기타 파이썬 시퀀스와 마찬가지로 색인 생성, 슬라이스 및 반복 될 수 있습니다. 다차원 배열은 축 당 하나의 인덱스를 가질 수 있습니다. 이러한 인덱스는 쉼표로 구분된 튜플로 제공됩니다.
4+
5+
```python
6+
import numpy as np
7+
8+
a = np.arange(10)**3
9+
print("1부터 10까지 3자승 한 배열 a =",a)
10+
print("a 배열의 두번째 인덱스 값 = ", a[2])
11+
print("a 배열의 2:5 인덱스 값 = ", a[2:5])
12+
a[0:6:2] = -1000 # from start to position 6, exclusive, set every 2nd element to -1000
13+
print("a 배열의 0번째 부터 6번째 까지 모든 두번째 값에 -1000을 대입한 값 = ", a)
14+
print("a 배열을 뒤집은 값 = ", a[ : :-1]) # reversed a
15+
16+
17+
#각 행마다 10씩 증가하는 배열 생성
18+
def f(x,y):
19+
return 10*x+y
20+
21+
ab = np.fromfunction(f,(5,4),dtype=int)
22+
print("각 행마다 10씩 증가하는 배열 생성\n",ab)
23+
print("생성된 배열의 2행 3열 값 = ",ab[2,3])
24+
print("생성된 배열 각행 2열 값 = ",ab[0:5, 1])
25+
print("생성된 배열 각행 1행~2행 값 \n ",ab[1:3, : ])
26+
```
27+
28+
위 코드를 실행하면 다음과 같은 결과가 출력 됩니다.
29+
30+
```text
31+
1부터 10까지 3자승 한 배열 a = [ 0 1 8 27 64 125 216 343 512 729]
32+
a 배열의 두번째 인덱스 값 = 8
33+
a 배열의 2:5 인덱스 값 = [ 8 27 64]
34+
a 배열의 0번째 부터 6번째 까지 모든 두번째 값에 -1000을 대입한 값 = [-1000 1 -1000 27 -1000 125 216 343 512 729]
35+
a 배열을 뒤집은 값 = [ 729 512 343 216 125 -1000 27 -1000 1 -1000]
36+
각 행마다 10씩 증가하는 배열 생성
37+
[[ 0 1 2 3]
38+
[10 11 12 13]
39+
[20 21 22 23]
40+
[30 31 32 33]
41+
[40 41 42 43]]
42+
생성된 배열의 2행 3열 값 = 23
43+
생성된 배열 각행 2열 값 = [ 1 11 21 31 41]
44+
생성된 배열 각행 1행~2행 값
45+
[[10 11 12 13]
46+
[20 21 22 23]]
47+
```
48+

Diff for: 4.-numpy-and-scipy/4.1-numpy/README.md

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# 4.1 NumPy
2+
3+
**NumPy**는 행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리할 수 있도록 지원하는 파이썬의 라이브러리입니다. NumPy는 Python을 사용한 과학 컴퓨팅의 기본 패키지입니다. NumPy는 데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제공합니다.
4+
5+
파이썬으로 수치해석, 통계 관련 기능을 구현하려고 할 때 Numpy는 가장 기본이 되는 모듈입니다. 그만큼 Numpy는 수치해석/ 통계 관련 작업시 중요한 역할을 하므로, 파이썬으로 관련 분야에 도전하고자 한다면 반드시 이에 대한 기초를 잘 쌓아 두고 가야 합니다.
6+
7+
NumPy의 주요 객체는 동일한 자료형의 다차원 배열입니다. NumPy의 차원은 축\(axes\)이라 합니다.
8+
9+
예를 들어 아래 예제에서 배열에는 2 개의 축이 있습니다. 첫 번째 축은 길이가 2이고 두 번째 축은 길이가 3이 됩니다.
10+
11+
```text
12+
[[ 1., 0., 0.],
13+
[ 0., 1., 2.]]
14+
```
15+
16+
NumPy의 배열 클래스를 ndarray라고 하며 그냥 array 라고도 합니다. numpy.array는 표준 Python 라이브러리 클래스인 array.array와 다릅니다. array.array는 일차원 배열 만 처리하고 기능이 별로 없습니다.
17+
18+
NumPy는 “Numerical Python“의 약자로 대규모 다차원 배열과 행렬 연산에 필요한 다양한 함수를 제공합니다. NumPy에 포함된 함수들은 다음과 같습니다.
19+
20+
* zeros\(int\): int 개수만큼의 0으로 이루어진 array를 만들어 줍니다. Np.zeors\(10\)\(10,\) 형태의 0으로 이루어진 벡터를 생성합니다. 만약 특정한 형상으로 만들길 원한다면 뒤에 .reshape\(x,y..\)를 더하면 됩니다.
21+
* arange\(\): 흔히 쓰이는 range 함수와 유사합니다. 범위와 간격 설정이 가능. 원하는 범위의 어레이를 만들 수 있습니다. 형태와 차원을 원하는 대로 설정하고 싶으면 .reshape\(\)를 쓰자.
22+
* shape: 어떤 어레이 뒤에 이걸 붙이면 그 어레이의 형상을 출력합니다. 각 차원의 배열 크기를 나타내는 정수의 튜플입니다. n 행과 m 열이 있는 행렬의 경우 shape는 \(n, m\)이 됩니다.
23+
* ndarray.ndim: 배열의 축\(axe\)\(차원\)
24+
* ndarray.dtype : 배열 내의 요소의 형태를 기술합니다. 표준 파이썬 유형을 사용하여 dtype을 만들거나 지정할 수 있습니다.
25+
* ndarray.itemsize: 배열의 각 요소의 바이트 단위의 사이즈.
26+
* ndarray.data: 배열의 실제의 요소를 포함한 버퍼. 일반적으로 색인화 기능을 사용하여 배열의 요소에 액세스하기 때문에 이 속성을 사용할 필요가 없다.
27+
* size: 차원 정보는 없이 원소의 개수만을 출력합니다.
28+
* argmax\(\): 입력 값으로 들어온 매트릭스의 각 행/열별 최댓값의 인덱스를 산출합니다. Axis = 를 추가하면 열별\(0\) 혹은 행별\(1\) 최댓값 위치를 알 수 있습니다.
29+
* T: 벡터의 전치\(transpose\)를 수행합니다. 단 1차원 어레이는 상황에 따라 행백터 혹은 열벡터로 바뀌므로 굳이 T를 붙일 이유는 없다.
30+
31+
```python
32+
import numpy as np
33+
a = np.arange(15).reshape(3, 5)
34+
print(a)
35+
print(a.shape)
36+
print(a.ndim)
37+
print(a.dtype.name)
38+
print(a.itemsize)
39+
print(a.size)
40+
print(type(a))
41+
42+
b = np.array([6, 7, 8])
43+
print(b)
44+
print(type(b))
45+
```
46+
47+
위의 코드를 실행하면 다음과 같은 결과를 출력합니다.
48+
49+
```text
50+
[[ 0 1 2 3 4]
51+
[ 5 6 7 8 9]
52+
[10 11 12 13 14]]
53+
(3, 5)
54+
2
55+
int32
56+
4
57+
15
58+
<class 'numpy.ndarray'>
59+
[6 7 8]
60+
<class 'numpy.ndarray'>
61+
```
62+
63+
64+

Diff for: SUMMARY.md

+4-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,10 @@
9090
* [3.11. Date & Time](3./3.11.-date-and-time.md)
9191
* [3.12. 파이썬 에러처리](3./3.12..md)
9292
* [4. 필수 학습 라이브러리들](4.-numpy-and-scipy/README.md)
93-
* [4.1 NumPy](4.-numpy-and-scipy/4.1-numpy.md)
93+
* [4.1 NumPy](4.-numpy-and-scipy/4.1-numpy/README.md)
94+
* [4.1.1. Basic Operations](4.-numpy-and-scipy/4.1-numpy/4.1.1.-basic-operations.md)
95+
* [4.1.2. Indexing, Slicing 그리고 Iterating](4.-numpy-and-scipy/4.1-numpy/4.1.2.-indexing-slicing-iterating.md)
96+
* [3.13.3. Shape Manipulation](4.-numpy-and-scipy/4.1-numpy/3.13.3.-shape-manipulation.md)
9497
* [4.2 Matplotlib](4.-numpy-and-scipy/4.2-matplotlib.md)
9598
* [4.3 SciPy](4.-numpy-and-scipy/4.3-scipy.md)
9699
* [4.4 Pandas](4.-numpy-and-scipy/4.4-pandas.md)

0 commit comments

Comments
 (0)