Python 함수 실행하기

day 1 Lecture (02)

  • 사용자 함수 만들고 실행 하기




personal function 만들기

  • python에서 함수 만들기

사용자 정의 함수

<형식>

1
2
3
4
5
def func_name(parameter):
# ...
# do something codes
# ...
return parameter

사용자가 직접 만들어 사용하는 함술로 매개변수 (parameter: 함수에 입력으로 전달 된 값을 받는 변수)와
인자(argument: 함수를 호출 할 때 전달 하는 입력값)이 있다.

1
2
3
4
5
6
7
#/c/Users/brill/Desktop/PyThon_Function/venv/Scripts/python
# -*- coding : utf-8 -*-

def cnt_letter():
"""안에 있는 문자를 세는 함수입니다. """ # 함수를 설명 하는 문구
print("hi")
return None
  • python 문서를 만들때 어떤 위치 (directory)에서 작업 했는지 제일 위에 써 줘야 한다.
  • 또한 cording을 어떤 언어로 했는지 확인 해 줘야 한다. (한글 : UTF-8)
  • def : definition 함수를 정의한다. 뒤에 cnt_letter라는 함수 이름을 써준다.
  • def cnt_letter(): ()안에 args를 넣어 주면 된다.
  • Doc : “”” 여기 “”” 여기 안에 이 함수가 어떤 함수인지 설명을 써 주어야 한다.
    • 혼자 일 하는 것이 아니기 때문에 함수를 공통적으로 사용 하기때문.
  • print : print
  • return : return None



함수 실행하기

1
2
3
4
if __name__ == "__main__":
print(cnt_letter())
print(help(cnt_letter()))
"""도움말 : 어떤 함수인지 확인 할 수 있다. """
  • 함수를 실행한다.

  • name 은 글로벌 변수로 보통 __main__으로 할당된다.

  • import 할 때와 구별 하려고 사용한다고 하는데 잘 모르겠다. (외워)

  • cnt_letter() 함수를 print 한다.

  • help 함수는 python 내장 함수인데,

class NoneType(object)

| Methods defined here:

|

| bool(self, /)

| self != 0

|

| repr(self, /)

| Return repr(self).

|

| ———————————————————–

| Static methods defined here:

|

| new(*args, **kwargs) from builtins.type

| Create and return a new object. See help(type) for accurate signature.

None

실행창에 위와 같은 도움을 준다.

실행이 성공하면 아래와 같은 결과값이 나온다.

Process finished with exit code 0

오늘 들은 강의보다 100배 나은 tistory가 있어서 공유 해본다. .. 아… 내 인생

사용자 정의 함수

MarkDown Table, hr, `code`

MarkDown Table

마크다운 문법에서 테이블 그리기

  • pipe로 table을 쉽게 생성 할 수 있다.

1
2
3
4
5
6
|  종류     |      기호      |      ex       |  exp  |
|:-----------:|:-------------:|:-------------:|:------:|
| assignment | = | a = 10 | 10에 a 를 바인딩 |
| assignmented assignment | **=, +=, -=, *=, //=, %=. <<=, >>=, &=, &#124;=, ^=, @= | a+= 10 |a에 10을 더한 결과 객체에 a를 바인딩 |


대충 칸에 맞게 순서만 맞으면
아래와 같이 예쁜 표를 만들 수 있다.

종류 기호 ex exp
assignment = a = 10 10에 a 를 바인딩
assignmented assignment **=, +=, -=, *=, //=, %=. <<=, >>=, &=, |=, ^=, @= a+= 10 a에 10을 더한 결과 객체에 a를 바인딩



table 안에 정렬

1
2
3
4
<!-- 하이픈 갯수로 크기 조절 -->
|왼쪽정렬 | 중간정렬|오른쪽정렬|
|:---------|:---------------:|---------:|

왼쪽정렬 중간정렬 오른쪽정렬
왼쪽정렬 중간정렬 오른쪽정렬




pipe 보이기

pipe는 Enrer Key 위에 있다.

1
&#124 

하지만, Markdown형식에서 보이지 않으닌까 \ |

만약 사용 하고 싶으면, &#124 를 사용 하도록 한다. ^0^

table만드는 것이 귀찮다면 아래 링크를 타고 가보쟈

table 쉽게 만드는 곳




code 강조하기

inline code 강조하는 방법

1
2
3
4
<!--Tab key 위쪽, 1 왼쪽에 위치한 Grave 키 이용-->

`code`

code 이것이 가능하다니, 이제야 알았다. !!!




수평선

1
2
3
4
5
6
7
8
---
(hyphen X 3)

***
(asterisk X 3)

___
(Underscore X 3)

(hyphen X 3)


(asterisk X 3)


(Underscore X 3)

Ref.

name & namespace

Name

  • name : identifier, variable, reference
  • object의 구분을 위해 사용

object

  • object는 value, type, 주소 의 3원소를 가지고 있다.

Ex)

1
2
3
4
5
a = 10
b = 0.12

print(a + b)

Memory에 저장된 형태

object(10, int, ref_cnt=1)0x100

= 100번째 저장된(주소) object는 10(value), int(type)의 속성을 갖는다.

** 하나의 object는 여러개의 이름(name or ref.)를 가질 수 있다.

** ref_cnt는 reference count를 의미한다.

name binding

- assignment
- import
- class 정의
- function 정의 ...

assignment

  • dictionary (key : value)
  • name binding (name : address)

객체(object)에 이름과 주소를 할당

이름 작성 규칙

  • 하나의 단어로 작성, 문자(한글), 숫자, _ 가능(띄워쓰기 불가능)
  • Keyword(+ 다른곳의 함수 이름)은 안쓰는 것이 좋고 쓰지만자
  • 숫자로 시작할 수 없으며, 대소문자 구분가능
  • _로 시작하는 이름은 class에서 쓰이므로 지양

name space

  • namespace는 이름 관리를 위한 dict container이다.
  • 모든 class, instance, fuction은 자신의 namespace를 가지고 있다.

built-in namespace

python에서 제공하는 함수, class, instance 등이 들어있는 곳.

Built-in Functions

global name space

내가 만든 함수, 인수, class들이 들어 있는 곳

1
2
3
4
5
a = 100
b = a
c = a
a = 101
print(a, b, c)

◎ namespace (global)

a : 0x100
b : 0x100
c : 0x100

◎ in memory

object(100, int ref_cnt=3) 0x100
object(101, int ref_cnt=1) 0x200

  • 그렇다면, 왜 ref_cnt 를 하는 것일까 ??
    • 사용되지 않는 객체를 삭제 하기 위해
    • 하나의 객체가 여러개의 이름을 가질 수있다.
    • 하지만, 하나의 이름은 하나의 객체만 가질 수 있다.

In

1
2
3
4
5
6
7
8
9
10
11
import sys

a= "Python"
b= a
c= a
a= "python"
print(f'a=[a], b=[b], c=[c]')

sys.getrefcount(a)
sys.getrefcount(b)
sys.getrefcount(c)

Out

a=[a], b=[b], c=[c]

4

5

5

키워드

pprint 안의 함수 pprint를 사용하여 키워드 리스트를 출력해 본다.

in

1
2
3
4
import keyword
import pprint as pp

pp.pprint(keyword.kwlist)

out

[‘False’,
‘None’,
‘True’,
‘_peg_parser_‘,
‘and’,
‘as’,
‘assert’,
‘async’,
‘await’,
‘break’,
‘class’,
‘continue’,
‘def’,
‘del’,
‘elif’,
‘else’,
‘except’,
‘finally’,
‘for’,
‘from’,
‘global’,
‘if’,
‘import’,
‘in’,
‘is’,
‘lambda’,
‘nonlocal’,
‘not’,
‘or’,
‘pass’,
‘raise’,
‘return’,
‘try’,
‘while’,
‘with’,
‘yield’]

assignment

  • assignment는 Expression이 아닌 statment이다.

    • Expression은 한개의 객체로 Evaluate될 수 있는것
    • 이름에 binding할 수 있다. (syntax에서 사용 할 수 있는 위치가 다르기 때문)
    • ver 3.8~ assignment expression (:=)이 추가되어 제공
  • assignment의 종류

    종류 기호 ex exp
    assignment = a = 10 10에 a 를 바인딩
    assignmented assignment **=, +=, -=, *=, //=, %=. <<=, >>=, &=, |=, ^=, @= a+= 10 a에 10을 더한 결과 객체에 a를 바인딩

덧셈의 ref_cnt

1
2
3
4
5
6
print("**********")
i = 10
print(id(i))
i += 1
print(id(i))
print("**********")

i가 10이때, i += 1 을 하면 11이라는 것이 만들어 진다.

이 11은 새로운 객체이다.

assignment_i

새로운 객체가 생성 되기 때문에 id가 달라진다. (memory의 adress)

pack & unPack

  • pack : (,) 콤마를 이용하여 Tuple 객체 하나 생성
  • unpack : 1개의 묶음에 있는 여러개의 객체 아이템이 분리되어 각각의 이름에 바인딩 됨.

이와 같은 pack과 unpack을 이용 하면, 여러 이름에 여러 값을 부여하기 쉽다.

in

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
data_int = 1
data_Tuple = 1,

data = 10, 20, 30
first, second, third = data
print(first, second, third)

def function():
a = 10
b = 20
print(locals())
del b
print(locals())

function()

Out

10 20 30


{‘a’: 10, ‘b’: 20}

{‘a’: 10}

  • del (변수) : python에 있는 좋은 기능
  • 변수를 삭제 할 수 있다.
  • locals() : local안에 있는 변수를 확인 할 수 있다.
  • type() : 변수의 data type을 확인 할 수 있다.

Ref. youtube, 1hr

Python Class and function

day 1 Lecture (01)




1. 새로운 Project 시작

  • python project를 새로 시작 해 보자.

create_NewProject


create_NewProject_file

pycham을 실행하여 project file을 만들어도 되지만, 원하는 directory에 file 을 만들고, 그 file에서 pycharm을 실행 해도 된다.

2. main.py :

stop point

main.py

1
2
3
4
5
6
7
8
9
10
11
12
13
# This is a sample Python script.
# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
# 인공지능 / 머신러닝 --> 리서치 관점 (논문리뷰, 정리, End User) / Engineer 관점


def print_hi(name):
# Use a breakpoint in the code line below to debug your script.
print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint.

# f string
# Press the green button in the gutter to run the script.

def name(name): 함수 정의 하기

1
2
3
4
5
6
7
def print_hi(name):
print(f'Hi, {name}')

if __name__ == '__main__':
print_hi('PyCharm')

print("hi", name)
  • Ctrl + shift + F10 : Run
  • def 로 함수 정의 이름(print_hi), 인수(name)을 설정 :

    • 원하는 동작(print(f’Hi, {name})) 넣기
  • 함수 실행 : 왜 이렇게 해야 하는가를 공부 해 오자.

    • if name == ‘main‘:
      print_hi(‘PyCharm’)
  • print(“hi”, print_hi(‘YH’))

Hi, PyCharm

Hi, YH

hi None

3. Import.

1
2
3
4
5
6
numpy == 1.21.4
pandas ==1.3.4
seaborn==0.11.2
matplotlib==3.5.0
scipy ==1.7.3
scikit-learn == 1.0.1

가상환경 설정을 하는 이유

Python PKG : 20~30 만개 있다.

  • 라이브러리 : 종속성이 있다.
  • 범용성이 좋아서 data analysis, web site development, 앱, 게임 등 개발, GUI, 개발 그 외 여러가지 가능
  • Matplotlib (기초가 되는 라이브러리, 3.5.0)를 참조하여 seaborn, plotly, …
  • 버전 관리 불가.
  • data 분석을 위한 가상 환경
    같은 Local machine 위에
    Game 개발을 위한 가상 환경 조성 (다른 버전을 사용 할 수 있다. )

PKG 설정:

https://pypi.org 에 들어가서 PKG 버전을보고 설치 하면 된다.

4. venu : 가상 환경 설정

venv_En

1
2
3
4
5
6
7
8
9
10
11

#terminal

$ source ./venv/Scripts/activate
(venv)

#terminal
$ which python
/c/Users/brill/Desktop/PyThon_Function/venv/Scripts/python
(venv)

가상환경 설정

  • $ which python
    /c/ProgramData/Anaconda3/python

  • $ source ./venv/Scripts/activate

    (venv)

  • $ which python

/c/Users/brill/Desktop/PyThon_Function/venv/Scripts/python

(venv)

(venv)

가 있어야 가상환경 설정이 된것이다.

raise_ValueError

terminal에서 pandas import 하는 방법

1
2
brill@DESKTOP-1IO6A45 MINGW64 ~/Desktop/PyThon_Function (master)
$ pip install pandas

Requirement already satisfied: pandas in c:\users\brill\desktop\python_function\venv\lib\site-packages (1
.3.4)
Requirement already satisfied: pytz>=2017.3 in c:\users\brill\desktop\python_function\venv\lib\site-packa
ges (from pandas) (2021.3)
Requirement already satisfied: numpy>=1.17.3 in c:\users\brill\desktop\python_function\venv\lib\site-pack
ages (from pandas) (1.21.4)
Requirement already satisfied: python-dateutil>=2.7.3 in c:\users\brill\desktop\python_function\venv\lib
site-packages (from pandas) (2.8.2)
Requirement already satisfied: six>=1.5 in c:\users\brill\desktop\python_function\venv\lib\site-packages
(from python-dateutil>=2.7.3->pandas) (1.16.0)
WARNING: You are using pip version 21.1.2; however, version 21.3.1 is available.
You should consider upgrading via the ‘C:\Users\brill\Desktop\PyThon_Function\venv\Scripts\python.exe -m pip install –upgrade pip’ c
ommand.
(venv)

pandas 등을 하나씩 install 하는 방법도 있지만, file(requirements)
를 만들어 install 하는 방법도 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# /c/Users/brill/Desktop/PyThon_Function/venv/Scripts/python
# -*- coding : utf-8 -*-

"""
모방 : 부모 클래스를 모방 후 자식이 창조
"""

import pandas as pd

class newDataFrame(pd.dataFrame):
pass

temp_dic = {"A": [1, 2, 3],
"B":[4, 5, 6]}

if __name__ == "__main__":
temp = pd.DataFrame(temp_dic, columns=["A","B"])
print(temp)
print("-----------------")
temp2 = newDataFrame(temp_dic, columns=["B", "A"])
print(temp2)

Pandas_Series

#Pandas에서 series 자료구조

series는 1차원 배열같은 자료 구조를 말한다.

아래 code는 python pandas의 parameter 값이다.

1
2
3

def __init__(data=None, index=None, dtype=None, name=None,
copy=False, fastpath=False)

series의 parameter는 data, index, dtype, name, copy, fastpath로 나뉘어져 있는데
name의 경우는 이름 인 것 같고 기본적으로 Index와 value라는 parameter를 많이 이용 하는 듯 하다.

  • Index : 배열의 이름
  • value : 값

python의 dictionalry와 거의 유사 한 것 같다.

(다음에 찾아보자 오늘은 벅참.)

series의 dtype에는 str, numpy.dtype, or ExtensionDtype, optional Data type 을
담을 수 있는데 이는 자동으로 값이 입력 되는 것같다.

series 객체를 생성 할 때 value와 Index를 직접 지정 해 줄 수 있다.

1
2
3
4
import pandas as pd
sr = pd.Series([24000, 20000, 1000, 5000],
index=["피자", "치킨", "콜라", "생맥"])
print(sr)

구글 코랩에서 작업 하고 있는데,
아래에 보면 series 객체의 parameter에대한 팝업이 나와 공부 하기 참 편하게 해 준다.

def init(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
One-dimensional ndarray with axis labels (including time series).

Labels need not be unique but must be a hashable type. The object supports both integer- and label-based indexing and provides a host of methods for performing operations involving the index. Statistical methods from ndarray have been overridden to automatically exclude missing data
(currently represented as NaN).
Operations between Series (+, -, /, *, **) align values based on their associated index values– they need not be the same length. The result index will be the sorted union of the two indexes.



Parameters

data : array-like, Iterable, dict, or scalar value

Contains data stored in Series.


index : array-like or Index (1d)

Values must be hashable and have the same length as data.

Non-unique index values are allowed. Will default to RangeIndex (0, 1, 2, …, n)
if not provided. If both a dict and index sequence are used, the index will
override the keys found in the dict.


dtype : str, numpy.dtype, or ExtensionDtype, optional

Data type for the output Series.

If not specified, this will be inferred from data.

See the user guide <basics.dtypes> for more usages.


name : str, optional


The name to give to the Series.


copy : bool, default False

Copy input data.

type

  • list []
  • tuple ()
  • set {}
  • dict {Key:value}

series

pandas

Pandas_panel

#pandas에서 panel 자료구조.

Pandas_DataFrame

#pandas에서 dataFrame 자료구조.

dataFrame은 표와 같은 스프레드 시트 형식의 자료 구조이다.

2차원 배열 또는 리스트, data table 전체를 포함하는 object라고 볼수 있음.

여러개의 column이 있고, 각 컬럼은 숫자, 문자열, boolean type을 담을 수 있다.

dataFrame은 Rew, column에대한 Index 이렇게 2가지 변수를 담고 있는데 matrix라고 할 수 있다.



pd.dataframe()

1
2
3
4
5
6
7
import pandas as pd
values = [['rose', 'tulip', 'Liry'], [4, 5, 6], ['red', 'blue', 'green']]
index = ['flower', 'Number', 'color']
columns = [1, 2, 3]

df = pd.DataFrame(values, index=index, columns=columns)
print(df)

df 는 data frame의 준말.

       1     2     3
flower rose  tulip Liry
Number 4     5     6
color  red   blue  green

Index와 column 의 dtype은 object이다.

데이터프레임은 리스트(List), 시리즈(Series), 딕셔너리(dict), Numpy의 ndarrays,
또 다른 데이터프레임으로 생성할 수 있습니다.

Ref.

DataFrame

Study Pandas

Pandas



판다스란

pandas는 데이터를 시각화 하기 좋은 python base의 한 라이브러리이다.

python을 이용한 data분석과 같은 작업에서 필수적으로 쓰이고 있다.

아나콘다와 같은 IDE를 이용하여 작업 할 수도 있지만, 기본적으로 Import하여 편하게 사용 할 수 있다.


판다스의 이름은 계량 경제학에서 사용되는 용어인 **’PANel DAta’**의 앞 글자를 따서 지어졌다.
판다스는 R에서 사용되던 data.frame 구조를 본뜬 DataFrame이라는 구조를 사용하기 때문에,
R의 data.frame에서 사용하던 기능 상당수를 무리없이 사용할 수 있도록 만들었다.
더욱이 파이썬이라는 접근성이 좋은 언어 기반으로 동작하기 때문에 데이터 분석을 파이썬으로 입문하는
사람들이 필수적으로 사용하는 라이브러리가 되었다.’


판다스 Import 하기

쥬피터 노트로 설치가 가능 하다고 하지만, 구글코랩이나 케글 노트에서는 Import하여 쉽게 사용한다.

1
2
import pandas as pd
pd.__version__

pandas는 오픈소스로 누구나 무료로 이용 할 수 있고,
Numpy, matplotlib등 다른 라이브러리들과 함께 쓰인다.

일반적으로 pandas는 pd로 import되기 때문에 pd.[function] 으로 써있으면
pandas 라이브러리를 이용한다고 생각 하면 된다.

Livraly의 경우 version 오류가 많이 있으므로,
Import 해 주는 라이브러리는 version을 꼭 확인하여 오류에 대비 하도록 한다.

Pandas에는 3가지 자료 구조가 있는데
series
dataFrame,
panel 이 그것이다.

pandas에대해 더 알아보고 싶다면, 링크를 타고 가보자.

ref.

판다스/위키


판다스를 이용에는 유용한 Tutorial들이 있다.
아래 있으니 시간이 날 때마다 보면서 Update하자.

영문판이 있지만 지금은 일단 한글 번역한것을 보자
화이팅 !

판다스/doc
10 minutes to Pandas/한글

Study Numpy

Numpy

Open In Colab

Numpy 정의

NumPy는 행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리 할 수 있도록 지원하는 파이썬의 라이브러리
Numpy는 데이터 구조 외에도 수치 계산을 위해 효율적으로 구현된 기능을 제시 한다.

Ref. Wiki


라이브러리에서 numpy 불러오기

우리는 numpy를 import 하여 numpy에 내장되어 있는 함수를 가져와 쓸 수 있다. 일반적으로 np에 저장하여 많이 사용 하는 듯 하다.

1
2
3
4
5
6
7
8
9
import numpy as np
print(np.__version__)

print ("Numpy의 version을 확인 해 볼 수 있다. ")

temp = np.array([1, 2, 3])
print(type(temp))

print ("Numpy의 type은 nd array인 것을 볼 수 있다. ")
1.19.5
Numpy의 version을 확인 해 볼 수 있다. 
<class 'numpy.ndarray'>

Numpy의 Type을 보면 nd array 인 것을 볼 수 있는데

ND : N dimension 을 의미한다.
즉 한국어로 번역 해 보면 N차 행렬 정도로 볼 수 있다.

Numpy 에서 배열을 생성 해 보자.

1차원 배열 생성

1차원의 배열을 생성해서 array와 List의 다른 점을 알아보자.

차이점은 shpae를 찍어 보면 알 수 있다.
내장 함수 : (fuction or method or attribute)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
data1 = [0, 1, 2, 3, 4]
data2 = [10, 9, 8, 7, 6]

My_array = np.array(data1)

print("data1은 List이다. ")
print(data1)
print(type(data1))
#print(data1.shape)
#List의 경우 shape 함수가 내장 되어 있지 않아 shape를 알 수 없다.
print("My_array은 numpy형식의 tuple인 것을 알 수 있다. ")
print(My_array)
print(My_array.shape)
print(type(My_array))

print(".dtype() 는 data의 type을 확인 할 수 있는 function 이다.")
print(My_array.dtype)

data1은 List이다. 
[0, 1, 2, 3, 4]
<class 'list'>
My_array은 numpy형식의 tuple인 것을 알 수 있다.  
[0 1 2 3 4]
(5,)
<class 'numpy.ndarray'>
.dtype() 는 data의 type을 확인 할 수 있는 function 이다.
int64

List 형식의 경우 shape 함수가 내장 되어 있지 않은 반면,
numpy 형식의 np.array 의 경우 tuple shape 함수가 내장 되어 에러가 나지 않과 (5, )의 형태로 result가 나오는 것 을 볼 수 있다.

.dtype() 는 data의 type을 확인 할 수 있는 function 이다.
이때 나타나는 int 64는 64byte의 타입 이라는 것을 알려 준다.

https://rfriend.tistory.com/285

2차원 배열 생성

4 X 3 배열을 만들어 보자.

1
2
3
4
my_array4 = np.array([[2,4,6],[8,10,12],[14,16,18],[20,22,24]])
print(my_array4)

my_array4.shape
[[ 2  4  6]
 [ 8 10 12]
 [14 16 18]
 [20 22 24]]





(4, 3)

3차원 배열 생성

1
2
3
my_array5 = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(my_array5)
my_array5.shape
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]]





(2, 2, 2)

Numpy 기본 함수들

  • arange
  • zeroes, ones
  • reshape
  • sort
  • argsort

arange

np.arange(5)를 넣으면 array안에 5개의 숫자가 순서대로 나오는 배열이 자동으로 만들어진다.

1
2
Array = np.arange(5)
print(Array)
[0 1 2 3 4]

np.arange(a, b, c) : a의 숫자부터 b 숫자까지 C씩 띄워서 배열생성

1
2
aArray = np.arange(1, 9, 2)
print(aArray)
[1 3 5 7]

zeroes, ones

zeroes와 ones 함수를 살펴 보자
각 함수들은 0과 1을 채워 넣어 배열을 생성하는 함수 들 이다.

1
2
3
4
5
6
7
8
9
10
11
print("Zeros_Array")
zeros_array = np.zeros((2,3))
print(zeros_array)
print("Data Type is:", zeros_array.dtype)
print("Data Shape is:", zeros_array.shape)

print("Ones_Array")
ones_array = np.ones((3,4), dtype='int32')
print(ones_array)
print("Data Type is:", ones_array.dtype)
print("Data Shape is:", ones_array.shape)
Zeros_Array
[[0. 0. 0.]
 [0. 0. 0.]]
Data Type is: float64
Data Shape is: (2, 3)
Ones_Array
[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]
Data Type is: int32
Data Shape is: (3, 4)

8행에 보면 Array를 행성 하면서 dtype을 int32로 지정 해 준 것을 볼 수 있다.

Zeros_Array의 경우 채워진 0들이 모두 float type의 실수 이기 때문에 0. 이라고 나타는 것을 볼 수 있지만, Ones_Array의 경우 1 만 나타난 Int 형태의 type인 것을 볼 수 있다.

reshape

reshape는 행렬의 모양을 바꿔주는 함수이다.
행렬의 모양을 바꿀 때에는 약간의 제약이 있는데
예를 들어 설명 해 보자면,

3X4 = 12, 6X2 =12로 형태 변환을 할 수 있지만,
3X5 = 15이기 때문에 변환이 불가능 하다.
이것이 이해가 가지 않는다면 중학교로 돌아 가야 할 지도 모른다.

1
2
3
4
5
6
print(ones_array)
print("Data Shape is:", ones_array.shape)
print("Ones_array의 형태를 reshpe로 바꿔보자 \n")
after_reshape = ones_array.reshape(6,2)
print(after_reshape)
print("Data Shape is:", after_reshape.shape)
[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]
Data Shape is: (3, 4)
Ones_array의 형태를 reshpe로 바꿔보자
[[1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]
 [1 1]]
Data Shape is: (6, 2)

2차원 배열은 3차원으로도 reshape 할 수 있다.

제약 조건은 3 X 4 = 12 였기 때문에 2 X 3 X 2 = 12가 되기 때문에 reshape 가 가능 하다.

1
2
3
4
5
6
7
8
9
10
11
12
after_reshape = ones_array.reshape(2,3,2)
print(after_reshape)
print("Data Shape is:", after_reshape.shape, "\n")

after_reshape2= ones_array.reshape(-1,6)
print("reshape(-1,6)? \n")
print(after_reshape2)

after_reshape3= ones_array.reshape(3,-1)
print("reshape(3, -1)? \n")
print(after_reshape3)
print("Data Shape is:", after_reshape3.shape)
[[[1 1]
  [1 1]
  [1 1]]

 [[1 1]
  [1 1]
  [1 1]]]
Data Shape is: (2, 3, 2) 

reshape(-1,6)? 

[[1 1 1 1 1 1]
 [1 1 1 1 1 1]]
reshape(3, -1)? 

[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]
Data Shape is: (3, 4)

만일 2차 행렬 reshape에서 한개의 변수만 정해 졌다면, 나머지 는 -1을 써주면 자동으로 알맞은 변수를 정해 줍니다.

3차 행렬 역시 남은 1개만 -1을 써서 reshape 함수로 행렬을 변환 할 수 있습니다.


21.11.02(이 아래 부분은 다음에 UPdate하기로 한다. )

short

1

argsort

Numpy 인덱싱과 슬라이딩

Numpy 정렬