Python 행렬

2020/Python 2019. 12. 11. 10:13
반응형

  ndarray의 2차원 배열로 다음과 같이 행렬을 정의 할 수 있습니다.

  행렬(배열)의 크기ndarray변수명.shape 명령으로 알 수 있습니다.

  이 출력은()로 둘러싸여 있으므로 tuple형으로 나타납니다. 다음과 같이 입력하여 w와 h에 각각 2와 3을 저장할 수 있습니다.

 

  요소를 참조하려면? (인덱스는 0부터 시작합니다^^)

  요소의 수정?

  요소가 0과 1인 ndarray 만들기

  모든 요소가 0인 ndarray는 np.zeros(size)로 만들 수 있습니다. np.ones(size)도 동일합니다.

  값이 랜덤인 행렬 생성?

  요소가 랜덤(임의)인 행렬을 생성하는 경우에는 np.random.rand(size)를 사용합니다.

  이 경우 size는 tuple이 아닙니다. 예를들어, 2 * 3의 난수행렬을 생성하려면?

  np.random.randn(size)를 사용하면 평균 0분산 1의 가우스 분포로 난수를 생성할 수 있습니다.

  또한 np.random.randint(low, high, size)를 사용하려면 low에서 high까지 임의의 정수값으로 이루어진 size 크기의 행렬을 생성할 수 있습니다.

  행렬의 크기 변경

  행렬의 크기 변경하는 경우 변수명.reshape(n,m)을 사용합니다. 

  행렬의 사칙연산

  사칙 연산 +, -, *, /는 해당되는 요소 전체에 적용됩니다.

  스칼라 * 행렬

스클라를 행렬에 곱하면 다음과 같이 모든 요소에 적용됩니다.

이 외에도 넘파이에는 여러 함수가 준비되어 있습니다.

제곱근

np.sqrt(x)

로그 np.log(x)
반올림 np.round(x,유효자리수)
평균 np.mean(x)
표준 편차 np.std(x)
최대값 np.max(x)
최소값 np.min(x)

  행렬 곱의 계산

  변수명1.dot(변수명2)

반응형

'2020 > Python' 카테고리의 다른 글

Python bool 배열  (0) 2019.12.11
Jupyter Notebook slicing  (0) 2019.12.11
Python 벡터(vector)  (0) 2019.12.10
Jupyter if문, for문  (0) 2019.12.10
Python tuple  (0) 2019.12.10
블로그 이미지

꽃꽂이하는개발자

,
반응형

아래의 데이터를 예를 들어 사용해 보겠습니다.

loc: 인덱스, 콜럼 아무것이나 사용가능

iloc: 행번호만 사용가능(정수)

# 정수만 사용가능하며 [0부터 시작하여 1번째 콜럼,3번째콜럼,-1이면 마지막 콜럼]

 

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

numpy.nb.zip
0.00MB

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

Pandas는 데이터 분석을 위한 파이썬 라이브러리입니다.

data.zip
0.03MB

위의 data.zip은 우리가 예제로 사용할 압축파일입니다.

이 압축파일을 사용하시는 jupyter폴더에 압축을 풀어주세요

쥬피터를 실행하시면 됩니다. 아래와 같은 화면이 나옵니다.

data를 확인해 보겠습니다.

이걸 확인하면 아래와 같은 정보가 있습니다.

이걸 가지고 실습을 시작하겠습니다.

 

메인화면에서 new - python3을 만들어 주겠습니다.

head()함수 : 앞에서부터 출력합니다. 기본값은 앞에서 5줄을 추출합니다.

tail()함수: 뒤에서부터 출력합니다. 기본은 5줄

type() 함수 : 데이터 타입의 확인

.clumns  : 어떠한 콜럼들을 가지고 있는가?

info() : 전반적인 정보 확인

.types : 자료형을 확인합니다.

단일 컬럼을 추출합니다.

복수개의 컬럼을 추출합니다.

특정 행을 추출합니다.

역 인덱싱

콜럼의 범위 지정

 

반응형
블로그 이미지

꽃꽂이하는개발자

,

Python 정규 표현식

2020/Python 2019. 11. 21. 18:57
반응형

#정규 표현식
# 단순 문자열 매칭이 아니라 문자열의 패턴으로 검색하는 것
import re

# 사용시 : 패턴 컴파일 -> 패턴 객체의 메서드로 검색 수행
p = re.compile(r"P[a-z]+")
#[] 패턴 1글자 + 1글자 이상
#대문자 P로 시작하고 소문자(a-z) 1글자 이상 있는 문자열
print(p.match("Life"))# 현재 패턴이 life와 일치하는지?
print("p match Python?", p.match("Python"))
print("p match Pizza?", p.match("Pizza"))

source = "Life is too short, you need Python"
# 방법 1. 패턴 컴파일 후 검색 수행
p = re.compile(r"L[a-z]+")
print(p.match("Life"))

# 방법 2. 축약형, 패턴 문자열과 검색 대상 문자열을 함께 제공
print(re.match(r"[A-Z][a-z]+", source))
# 매치된 내용을 추출할 경우 group() 메서드로 뽑을 수 있다
print("Match 된 내용:", re.match(r"[A-Z][a-z]+", source).group())

#축약 문자
# \d(숫자), \w(문자), \s (공백문자)
# \D(숫자가 아닌 것), \W(문자가 아닌 것), \S(공백문자 아닌것)
# search -> 전체 문자열 대상 패턴 검색
#findall -> 전체 문자열 대상 검색 후 list로 반환
# finditer -> 검색 후 iterator(반복자)를 반환
source = "Paint C JavaScript 123 456 Perl Java Python P123 Ruby"
#p로 시작되는 문자열 패턴만 검색해서 iterator을 반환
iter = re.finditer(r"\bp\w+", source, re.IGNORECASE)
#re.IGNORECASE는 대소문자를 구분하지 말고 검색하라는 의미다

for x in iter:
print("검색된 단어:", x)

# 자주 사용될 수 있는 패턴들
# 전화번호의 예
tel = re.compile(r"(\d{2,3})-(\d{3,4})-(\d{4})")
m = tel.match("010-1234-5678")
print("result:", m)
# () 로 묶은 것은 groups() 메서드로 추출
print("groups:", m.groups()) #groups
#매칭된 전체 내용을 추출: group()
print("매칭된 내용:", m.group()) #group

tel= re.compile(r"(?P<area>\d{2,3})-(?P<exchange>\d{3,4})-(?P<number>\d{4})")
# 그룹핑시 (?P<이름>) 형식을 부여하면 매칭 결과에 이름을 부여할 수 있다
# 이름이 부여된 매칭 결과는 groupdict()메서드로 사전으로 반환받을 수 있다.
m = tel.match("010-1234-5678")
print(m.groups()) # 그룹핑된 결과 확인
print(m.group()) #매칭된 전체 결과
print(m.groupdict()) #부여한 이름을 기반으로 한 dict 객체 반환

# 이메일
pattern = r"\w+[\w\.]*@[\w\.]*\.[a-z]+"
source = "skyun.nam@gmail.com"

print(re.match(pattern, source))

# 한글 매칭 (Unicode 기반)
# 한국어 정규식의 예제
source = "English 대한민국 Japan China"
p = re.compile(r"[-]+")
print(p.findall(source))

반응형
블로그 이미지

꽃꽂이하는개발자

,

Python datetime

2020/Python 2019. 11. 20. 19:10
반응형

#datetime은 날짜를 위한 date 객체, 시간을 위한 time 객체를 합친 것
#datetime 모듈을 import 사용

datetime은 날짜를 위한 date 객체, 시간을 위한 time 객체를 합친 것입니다.

datetime은 모듈을 import 하여 사용할 수 있습니다.

시간을 획득해 보도록 하겠습니다 현재시간의 datetime의 now() 메서드를 사용합니다.

dt = datetime.datetime.now()

print("now:",dt)

이렇게 출력됩니다.

 

# 특정 날짜와 시간을 얻을 때는 생성자를 활용하며 최소 년월일은 지정해야 합니다.

dt= datetime.datetime(1999,12,31)

print("dt:" dt)

#만약 실존하지 않는 날짜라면 ValueError이 뜨게 됩니다

dt = datetime.datetime(1999,12,32)

# 주요 속성들로는 year, month, day, hour, minute, second, microsecond를 얻을 수 있습니다.

print("dt의 연월일:", dt.year, dt.month, dt.day)

#요일의 확인 weekday() 메서드로 확인 합니다.

# 월요일은 0부터 시작하며 일요일은 6입니다.

print("1999-12-32일의 요일:" dt.weekday())

datetime에서 날짜만 확인하는 방법은 date() 를 사용하면 되며 date 객체를 반환합니다

마찬가지로 시간만 확인하는 것은 time() -> time 객체로 반환합니다.

 

 

 


import datetime #내장 객체

def get_datetime():
#시간의 획득
#현재 시간 datetime now() 메서드
dt = datetime.datetime.now()
print("now:", dt)

#특정 날짜와 시간을 얻을 때는 생성자를 활용
# 최소 년월일은 지정해야 한다
dt = datetime.datetime(1999,12,31)
print("dt:", dt)

#만약 실존하지 않는 날짜라면 ValueError
#dt = datetime.datetime(1999,12,32)

#주요 속성들로 year, month, day, hour, minute, second, microsecond를 얻을 수 있다.
print("dt의 연월일:", dt.year, dt.month, dt.day)

#요일의 확인 weekday() 메서드
# : 0~ : 6
print("1999-12-32일의 요일:", dt.weekday())

#datetime에서 날짜만 확인 date() -> date 객체 반환
#datetime에서 시간만 확인 time() ->time 객체 반환
nowdate = datetime.datetime.now().date()
nowtime = datetime.datetime.now().time()

print("NOWDATE:", nowdate, type(nowdate))
print("NOWTIME:", nowtime, type(nowtime))
#date 객체는 datetime이 가진 year, month, day 등 날짜 관련 속성들을 가지고 있다
#time 객체는 datetime이 가진 시간 관련 속성과 메서드들을 그대로 사용

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형


def handling_exception():
""" 예외 처리 연습 """
# 인덱스 에러 IndexError
# 캐스팅 에러 ValueError
# 사전 키 접근 에러 KeyError
# 정수를 0으로 나눴을 경우 ZeroDivisionError

lst =[]
try:
#lst[3] =1 #IndexError
4/1 #ZeroDivisionError
#int("String") # valueError
except ValueError as e:
print("정수로 변환할 수 없어요.", e)
except ZeroDivisionError as e:
print("정수를 0으로 나눌 수 없어요.", e)
except IndexError as e:
print("인덱스 범위가 벗어났습니다.", e)
except Exception as e:
#Exception은 모든 예외의 부모 클래스
print("Exception:", e)
else:
print("예외없이 코드가 실행되었습니다.")

finally:
print("예외 여부 관계 없이 항상 마지막에 실행")

def raise_exception():
def beware_dog(animal):
if animal.lower() == "dog":
# 강제 익셉션 발생
raise RuntimeError("강아지는 출입을 제한합니다.")
else:
print("어서오세요!")
try:
beware_dog("cow")
beware_dog("cat")
beware_dog("dog")
except Exception as e:
print(e, type(e))

if __name__ =="__main__":
handling_exception()
raise_exception()

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

copy 는 일반적으로 복사라고 생각하면 됩니다.

a= 1,2,3,4 

b = a 

여기서 b를 바꾸면 a또한 바뀝니다. b가 a의 주소를 가지고 있기 때문이죠

 

하지만 deepcopy 는 객체 자체를 복제합니다

a= 1,2,3,4

b= a

a가 지고 있는 1,2,3,4 와

b가 가지고 있는 1,2,3,4 는 저장 위치가 다릅니다. ex)집 주소가 다름, 건물이 다름, 지역이 다름

그렇기 때문에 b를 바꿔도 b의 내용이 바뀌는 것이지 a의 내용이 바뀌는 것이 아닙니다.

하나의 주소를 가지고 있느냐? = copy

주소가 다르냐? = deepcopy

 

#객체의 이해
# 모듈 전체에서 공유되는 심벌들
g_a = 1 #글로벌 변수
g_b = "홍길동" #글로벌 변수

def func():
#내부에 로컬 심볼 영역이 생성
#객체에 접근할 경우, 로컬 영역 먼저 확인
#없을 경우 상위로 이동하여 검색합니다.
l_a = 2
l_b = "임꺽정"
# local 영역 심볼테이블 확인
print(locals())

class MyClass:
x = 10
y = 10

def symbol_table():
# 전역 변수 심볼 테이블 출력
print(globals())
print(type(globals()))
#dict로 반환
# 앞뒤에 __-> 심볼들은 파이썬 내부에서 사용하는 심볼. 변경하면 안된다

func()
#globals() 반환값이 dict
# 포함 여부 확인
print("g_a in global?", "g_a" in globals())

#내부에 __dict__ 를 확인하면 해당 객체 내부의 심볼 테이블 확인 가능
# 사용자 정의 함수 func의 심볼 테이블을 확인
print(func.__dict__)
print(MyClass.__dict__)

def object_id():
# 변수는 심볼명과 객체의 주소 값을 함께 가지고 관리된다
# id() 함수로 객체의 주소 확인
# is 연산자로 두 객체의 동질성을 확인할 수 있다
i1 = 10
i2 =int(10)
print("int:", hex(id(i1)), hex(id(i2)))
print(i1==i2)
print(id(i1) ==id(i2))
# 두 객체의 id() 값이 동일하다면 두 객체는 같은 객체
print(i1 is i2) # 두 객체가 동일 객체인지(같은 주소) 확인하는 연산자

# mutable 객체
lst1 = [1,2,3]
lst2 = [1,2,3]

print("lst1 == lst2 ?", lst1 == lst2) #동등성의 비교
print("lst1 is lst2 ?", lst1 is lst2) #is는 동일성의 비교

def object_copy():
a = [1,2,3]
b = a #단순 레퍼런스 복사
print(a,b)

b[0] = 4
print(a,b)

a = [1,2,3]
b = [4,5,6]
c = [a,b,100]
print(c)
# 단순 레퍼런스 복사는 주소만 카피

#객체 복제를 위한 copy import
import copy
#c를 복제해서 새객체 생성 d에 할당
d = copy.copy(c)
print(d)

d[2] = 10
print(c,d)

d[1][0] = 10
print(c,d)
print("얕은 복제: c is d?", c is d)
print("얕은 복제: c[0] is d[0]?", c[0] is d[0])
# -> 얕은 복제 : 새 객체를 만들지만 내부에 있는 요소의 주소값들을 그대로 복제
# -> 이 문제 해결을 위해서는 깊은 복제가 필요
d = copy.deepcopy(c) # 깊은 복제, 재귀적 복제
print(c,d)

#c[0] 객체와 d[0]객체는 같은ㅇ 객체인가?
print("c is d?", c is d)
print("c[0] is d[0]?", c[0] is d[0])


if __name__ == "__main__":
#func()
#symbol_table()
#object_id()
object_copy()

반응형
블로그 이미지

꽃꽂이하는개발자

,