# 주피터의 사용법과 numpy 사용하기
import numpy as np
ar = np.array([0,1,2,3,4,5,6,7,8,9])
print(ar)
ar
mylist=[0,1,2,3,4,5,6,7,8,9]
ar1 = np.array(mylist)
print(ar1)
ar1
print(type(mylist))
print(type(ar))
data=[0,1,2,3,4,5,6,7,8,9]
data1=list(range(10))
answer=[]
for i in data:
answer.append(2*i)
print(answer)
# 백터화 연산을 사용하면 for반복문 없이 한번의 연산으로 계산할수 있음
x=np.array(data)
x
x*2
# 벡터화 연산은 비교연산과 논리연산을 포함한 모든 종류의 수학연산에 대해 적용된다.
a=np.array([1,2,3])
b=np.array([10,20,30])
#numpy array의 벡터화 연산
2*a+b
#리스트의 연산과 비교 해보기
lista=[1,2,3]
listb=[10,20,30]
2*lista+listb
print(a)
a==2
#a == np.array([2,2,2]) 인가?
b>10
(a==2)&(b>10)#and 논리연산
(a==2)|(b>10)#or논리연산
# 2차원 배열 만들기
# ndarray는 n차원 배열의 구조를 지원한다
c= np.array([[0,1,2],[3,4,5]]) # 2x3 array
print(c)
c
#2차원 요소의 갯수
len(c)
#1파원 요소의 갯수
print(c[0])
len(c[0])
k=np.array([[10,20,30,40],[50,60,70,80]])
k
j=np.array([[1,2,3,4],[5,6,7,8]])
i=j*10
i
d=np.array([[[1,2,3,4,],[5,6,7,8],[9,10,11,12]],
[[11,12,13,14],[15,16,17,18],[19,20,21,22]]])
print(d)
d1=[[1,2,3,4,],[5,6,7,8],[9,10,11,12]]
d2=[[11,12,13,14],[15,16,17,18],[19,20,21,22]]
d=np.array([d1,d2])
print(d)
#각 차원의 크기를 구함
len(d),len(d[1]),len(d[0][0])
# ndim속성은 배열의 차원, shape속성은 배열의 크기를 반환한다
print(a.ndim)
print(a.shape)
print(c.ndim)
print(c.shape)
print(d)
print(d.ndim)
print(d.shape)
type(d)
print(a)
print(a[1])
print(a[-1])
print(d)
print(d[0][1])
print(d[-1][-1])
print(d[-1][-1][-1])
# 배열 객체로 구현한 다차원 배열의 슬라이싱
t=np.array([[0,1,2,3],[4,5,6,7]])
t
t[0,:]# 첫번쨰 1차원 전체
t[:,1]#각 1차원의 두번째 요소
t[1,1:] #2번쨰 일차원의 두번째부터 끝까지
t[:2,:2]#처음부터 2번쨰 까지의 2차원 요소 중 처음부터 2번쨰 까지의 1차원 요소
# 연습문제1 7을 인덱싱 한다
m=np.array([[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]])
m
m[1,2]
#14인덱싱하기
m[2,4],m[-1,-1]
#[6,7]인덱싱 하기
m[1,1:3]
#3[3,4],[8,9]슬라이싱하기
m[:2,3:], m[:2,-2:]
# fancy indexing 데이터 베이스에서 요청하면 값을 가져오는것과 같음
a=np.array([0,1,2,3,4,5])
idx=np.array([True,False,True,False,True,False])
a[idx]
np.array([0,1,2,])[np.array([True,False,True])]
# 조건문 연산 사용하기
print(a)
a%2
a%2==0
a[a%2==0]
# 정수 배열 인덱싱
a=np.array([11,22,33,44,55,66,77,88,99])
idx=np.array([0,2,4,6,8])
a[idx]
z=np.array([11,22,33,44,55,66,77,88,99])
ixd3 = np.array([0,0,0,0,0,1,1,1,1,1,2,2,2,2,2])
z[ixd3]
a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
a
a[:,[True,False,False,True]]
a[[2,0,1],:]#1차원의 순서 바꾸기
r=range(1,21)
x=np.array(r)
x[x%3==0]
print(x)
x[x%4==1]
x[(x%4==1) & (x%3==0)]
import numpy as np
x=np.array([1,2,3])
print(x)
x.dtype
x=np.array([1.0,2.0,3.0])
x.dtype
x=np.array([1,2,3.0])
print(x)
x.dtype
x=np.array([1,2,3],dtype='f')#정수였던 요소를 실수로변경
x.dtype
x
x[0]+x[1]
x=np.array([1,2,3],dtype='U')#실수에서 다시 unicode로 변경
x.dtype
x
x[0]+x[1]#문자열 '1'+'2'
np.array([0,1,-1,0]) / np.array([1,0,0,0]) #inf=무한대 nan=나눌수없다.
np.log(0)#밑수가 e인 로그함수
np.exp(-np.inf)
np.exp(1)
a=np.zeros(5)
a
b=np.zeros((2,3))# 크기를 뜻하는 튜플을 입력하면 다차원 배열도 만들수 있다
b
c=np.zeros((5,2),dtype='i')
c
d=np.zeros(5,dtype='U4')#unicode 4글자 4글자가 넘어가면 짤림
d
d[0]='abc'
d[1]='abcd'
d[2]='ABCDE'
d
e=np.ones((2,3,4),dtype='i8')#0아닌 1로 배열을 생성하려면
e
# #크기를 튜플로 명시하지않고 다른 배열과 같은 크기로 생성하고 싶다면 like사용
f=np.ones_like(e,dtype='f')
f1=np.zeros_like(e)
f1
# 큰 배열을 만들떄는 0,1등을 사용하면 시간도 오래걸리고 오버플로우걸릴수있음
# 따라서 가비지 데이터를 넣어 원하는 크기의 배열을 만듬
g=np.empty((4,3))
g
#%%time은 해당 배열을 만드는데 걸리는 시간
%%
h=np.empty((10000,10000))
get_ipython().run_cell_magic('time', '', 'm=np.ones((10000,10000))')
get_ipython().run_cell_magic('time', '', 'm=np.zeros((10000,10000))')
np.arange(10)
np.arange(3,21,2)#시작,끝(포함x),단계
np.arange(-10,11,2)
np.arange(7,-9,-3)
np.arange(1.7,11,1.5)
# a와b사이의 c개의 점을 생성 c는 디폴트 50개
np.linspace(0,100,5) #시작, 끝(포함),갯수
np.linspace(0,10,10,endpoint=False)#0~9까지 10제외
np.linspace(0,10,10,endpoint=True)#0,10포함 10개구간으로
np.linspace(0,10,10)
np.linspace(1,50)#갯수
# a~b를 linspace로 같은 간격으로 나누고
np.logspace(1,4,4)
np.linspace(0.1,1.0,num=10)
10**0.1,10**0.2,10**0.3,10**0.4,10**0.5,
10**np.linspace(0.1,2.0,20) #라인스페이스로 로그스페이스 표현
np.logspace(0.1,2.0,20)
import matplotlib.pyplot as plt
plt.plot(np.linspace(0.1,2.0,20),np.logspace(0.02,2.0,20))
# 전치연산 2차원 배열의 전치연산은 행과 열을 바꾸는 작업 매서드가 아닌 t속성으로 구할슀다.
A=np.array([[1,2,3],[4,5,6]])
A,A.shape
A.T
# 배열의 크기 변형
# reshape은 만들어진 배열의 내부 데이터는 보존한태로 형태만 바꿀때 사용
a=np.arange(12)
a
b=np.arange(12).reshape(3,2,2)
b
print(b.ndim)
print(b.shape)
사용하는 원소의 갯수가 정해저 있기떄문에 명령형태의 튜플 원소중 하나는 -1이라는
숫자로 대체할수있다. -1을 넣으면 해당숫자는 계산되어 사용된다
ar=a.reshape(3,-1)
ar
a.reshape(3,-1).shape
b=a.reshape(2,2,-1)
b
c=a.reshape(2,-1,2)
print(c)
c.shape
# 다차원 배열을 무조건 1차원으로 펼치기 위해서는 flatten 이나 ravel 매서드를 사용한다
print(b)
b.flatten()
b.ravel()
# 배열에서 중요한 점은 (6,1)/ (1,6)은 데이터가 같아도 다른 객체라는점
x=np.arange(6)
x,len(x),x.ndim,x.shape
x1=x.reshape(1,6)
x1,len(x1),x1.ndim,x1.shape
x2=x.reshape(6,1)
x2,len(x2),x2.ndim,x2.shape
x.reshape(6,) == x.reshape(1,6)
x.reshape(6,) is x.reshape(1,6)
x.reshape(2,3) == x.reshape(3,2)
np.arange(11,31).reshape(4,-1)
np.arange(3.3,-8.3,-0.5).reshape(6,-1)
# hstack 행의 수가 같은 2개 이상의 배열을 옆으로 연결할떄 사용
a1=np.ones((2,3))
a1
a2=np.ones((2,2))
a2
np.hstack([a1,a2])
a3=np.arange(10,70,10).reshape(2,3)
a3
np.hstack([a1,a2,a3])
# vstack은 열의 수가 같은 2개이상의 배열을 위아래로 연결
b1=np.ones((2,3))
b1
b2=np.zeros((3,3))
b2
np.vstack([b1,b2])
# column_stack 은 두개이상의 배열을 컬럼 방향으로 세워 좌우로 연결
cs1=np.array([1,2,3])
cs2=np.array([10,20,30])
np.column_stack([cs1,cs2])
# dstack 명령은 제3의 축, 행이나 열이 아닌 깊이 방향으로 배열을 합친다 가장 안쪽 원소의 차원이 증가한다
# 가장 내부의 숫자 원소가 배열이 된다
c1=np.ones(3)
print(c1)
print(c1.shape)
c2=np.zeros(3)
c2
np.dstack([c1,c2])
(np.dstack([c1,c2])).shape
c3=np.ones((3,4))
c3
c4=np.zeros((3,4))
c4
np.dstack([c3,c4])
(np.dstack([c3,c4])).shape
a=np.zeros(3)
b=np.ones(2)
x=np.hstack([a,b])
y=np.arange(10,151,10).reshape(3,-1)
z=np.vstack([x,x,x,y])
print(np.vstack([z,z]))
a=np.zeros((3,3))
b=np.ones((3,2))
y=np.arange(10,151,10).reshape(3,-1)
x=np.hstack([a,b])
# numpy로 csv파일 읽고 쓰기
import numpy as np
a= np.arange(1,101).reshape(20,5)
b=np.arange(201,401,2).reshape(20,5)
np.savetxt('c:/users/cyan9/workspace/file_a.csv',a,fmt='%d',delimiter=',')
np.savetxt('c:/users/cyan9/workspace/file_a.txt',a+b,fmt='%d',delimiter=',')
read_a=np.loadtxt('c:/users/cyan9/workspace/file_a.txt',delimiter=',',skiprows=1,dtype='int')
read_a
read_b=np.loadtxt('c:/users/cyan9/workspace/file_a.csv',delimiter=',',skiprows=1,dtype='int')
read_b
'First step > AI 기초반' 카테고리의 다른 글
[TIL]21.07.02tensorflow 1.x버젼으로 tensor 이해하기 (0) | 2021.07.02 |
---|---|
[TIL]21.07.01 회귀 분석, 최소 제곱법,MSE,RMSE (0) | 2021.07.01 |
[TIL]21.06.29AI 첫날 셋팅 (0) | 2021.06.29 |
[TIL] api로 날씨데이터를 받아와서 출력하기 (0) | 2021.06.27 |
[TIL]21.06.25 숫자야구게임 만들기 (0) | 2021.06.25 |