donut

'Module'에 해당되는 글 6건

  1. 파이썬 3차원 배열 다루기
  2. Python Pandas DataFrame
  3. Python pandas series
  4. Python Numpy3
  5. Python Numpy2
  6. Python Numpy1

파이썬 3차원 배열 다루기

Module/Pandas
numpystudy

Numpy Study

3차원 넘피 배열에 대한 공부 기록 입니다.

In [30]:
#모듈선언
import numpy as np
In [31]:
#3차원 배열 선언
test1 = np.array([[[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]]])
In [32]:
#데이터확인
test1
Out[32]:
array([[[ 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]]])
In [33]:
#데이터 길이, 차원, 갯수(크기)확인
print(test1.shape)
print(test1.ndim)
print(test1.size)
(3, 3, 3)
3
27
In [34]:
test1.reshape(9,3)
Out[34]:
array([[ 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]])
In [35]:
#3차원의 배열을 1차원으로 재배치
test1.reshape(27,)
Out[35]:
array([ 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])
In [36]:
#3차원의 배열을 2차원으로 재배치
test1.reshape(3,9)
Out[36]:
array([[ 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]])
In [37]:
#3차원의 배열을 재배치
test1.reshape(3,1,9)
Out[37]:
array([[[ 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]]])
In [38]:
#3차원의 배열을 1차원으로 재배치
test1.flatten()
Out[38]:
array([ 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])
In [ ]:
 

'Module > Pandas' 카테고리의 다른 글

Python Pandas DataFrame  (0) 2020.07.19
Python pandas series  (0) 2020.07.19

Python Pandas DataFrame

Module/Pandas

 

 

 

안녕하세요. 오늘은 지난시간 포스팅했던 시리즈에 이어서 판다스를 이루는 자료구조 두번째 DataFrame에 대해 포스팅하겠습니다.

 

pandas

구조화된 데이터의 처리를 지원하는 파이썬 라이브러리.
파이썬으로 엑셀처럼 데이터를 다룰 수 있음.

pandas자료구조

Series와 DataFrame
DataFrame는 엑셀과 비슷한데 데이터의 형식, 행과 열이 존재함 열 : column 이라고 부름 행 : row, index라고 부름

접근순서는 열 > 행

 

DataFrame 생성

데이터의 종류

csv, xlsx파일
리스트, 딕셔너리 등등

 

DataFrame 생성

파일로 데이터 프레임을 가져올 경우에는
인덱스를 변환 해준다는 등의 데이터 전처리가 꼭 필요함.

In [4]:
#필요한 모듈 세팅
from pandas import DataFrame
from pandas import read_csv
from pandas import ExcelFile
In [6]:
#csv파일로 생성하기
csvtest = read_csv('/Users/donut/tstory/TestCsvFile.csv')
csvtest
Out[6]:
  Unnamed: 0 콜라 커피 사이다 라면 Unnamed: 5 Unnamed: 6
0 20 30 40 30 NaN NaN
1 영양도 20 20 40 40 NaN NaN
2 가격 30 22 20 10 NaN NaN
In [10]:
#엑셀파일로 생성하기
#엑셀파일로 가져올 경우, 가져오기원하는 시트를 파싱 해서 불어와야함
xlsxtest = ExcelFile('/Users/donut/tstory/TestXlsxFile.xlsx')
xlsxtest
Out[10]:
<pandas.io.excel._base.ExcelFile at 0x7fdc212a78d0>
In [11]:
df = xlsxtest.parse(xlsxtest.sheet_names[0])
df
Out[11]:
  Unnamed: 0 콜라 커피 사이다 라면
0 20 30 40 30
1 영양도 20 20 40 40
2 가격 30 22 20 10
In [66]:
# 리스트로 생성하기
testlist = [
    [1, '남자', 40, None, 64],
    [2, '여자', 30, 90, 62, 72],
    [1, '남자', 92, 70, None, None],
    [3, '여자', 63, 60, 31, 70],
    [4, '남자', 120, 50, None, 88]
]

df = DataFrame(testlist)
df
Out[66]:
  0 1 2 3 4 5
0 1 남자 40 NaN 64.0 NaN
1 2 여자 30 90.0 62.0 72.0
2 1 남자 92 70.0 NaN NaN
3 3 여자 63 60.0 31.0 70.0
4 4 남자 120 50.0 NaN 88.0
 

DataFrame 다루기

In [67]:
#데이터 프레임의 컬럼과 인덱스를 바꿔주기
df.columns = ['학년', '성별', '국어', '영어', '수학', '과학']
df.index = ['짱구', '맹구', '사탕', '도적', '검사']
df
Out[67]:
  학년 성별 국어 영어 수학 과학
짱구 1 남자 40 NaN 64.0 NaN
맹구 2 여자 30 90.0 62.0 72.0
사탕 1 남자 92 70.0 NaN NaN
도적 3 여자 63 60.0 31.0 70.0
검사 4 남자 120 50.0 NaN 88.0
In [68]:
#데이터프레임 크기 확인
#(행, 열)
dfsize = df.shape
dfsize
Out[68]:
(5, 6)
In [69]:
#행과 열 각각의 변수 저장 가능
행 , 열 = df.shape
print(행)
print(열)
 
5
6
In [70]:
#데이타 프레임 상위, 하위건 확인하기
#파라미터 생략시 5건을 생성한다.
dftop = df.head(2)
dftop
Out[70]:
  학년 성별 국어 영어 수학 과학
짱구 1 남자 40 NaN 64.0 NaN
맹구 2 여자 30 90.0 62.0 72.0
In [71]:
dflast = df.tail(2)
dflast
Out[71]:
  학년 성별 국어 영어 수학 과학
도적 3 여자 63 60.0 31.0 70.0
검사 4 남자 120 50.0 NaN 88.0
In [72]:
#dataframe index to list
#데이타프레임 인덱스를 리스트로 변환하기
dfindexlist = list(df.index)
dfindexlist
Out[72]:
['짱구', '맹구', '사탕', '도적', '검사']
In [73]:
#dataframe columns to list
#데이타프레임 컬럼을 리스트로 변환하기
dfcolumnlist = list(df.columns)
dfcolumnlist
Out[73]:
['학년', '성별', '국어', '영어', '수학', '과학']
In [74]:
#데이터의 값들만 확인하기
df.values
Out[74]:
array([[1, '남자', 40, nan, 64.0, nan],
       [2, '여자', 30, 90.0, 62.0, 72.0],
       [1, '남자', 92, 70.0, nan, nan],
       [3, '여자', 63, 60.0, 31.0, 70.0],
       [4, '남자', 120, 50.0, nan, 88.0]], dtype=object)
In [75]:
#데이터 프레임 전치구하기
df_t = df.T
df_t
Out[75]:
  짱구 맹구 사탕 도적 검사
학년 1 2 1 3 4
성별 남자 여자 남자 여자 남자
국어 40 30 92 63 120
영어 NaN 90 70 60 50
수학 64 62 NaN 31 NaN
과학 NaN 72 NaN 70 88
 

데이터 접근

In [76]:
#데이터 프레임 확인
df
Out[76]:
  학년 성별 국어 영어 수학 과학
짱구 1 남자 40 NaN 64.0 NaN
맹구 2 여자 30 90.0 62.0 72.0
사탕 1 남자 92 70.0 NaN NaN
도적 3 여자 63 60.0 31.0 70.0
검사 4 남자 120 50.0 NaN 88.0
In [77]:
#데이터 프레임을 열단위로 접근하기
df['성별']
Out[77]:
짱구    남자
맹구    여자
사탕    남자
도적    여자
검사    남자
Name: 성별, dtype: object
In [78]:
#열단위로 접근하여 그 값들을 리스트로 변환
list(df['성별'].values)
Out[78]:
['남자', '여자', '남자', '여자', '남자']
In [79]:
#데이터 프레임을 행단위로 접근하기
df.loc['짱구']
Out[79]:
학년      1
성별     남자
국어     40
영어    NaN
수학     64
과학    NaN
Name: 짱구, dtype: object
In [80]:
#데이터프레임을 행단위로 접근한 후 값을 리스트로 변환
list(df.loc['짱구'])
Out[80]:
[1, '남자', 40, nan, 64.0, nan]
 

데이터 프레임 값 바꿔주기

In [81]:
#열 -> 행 단위 접근은 에러
df.['과학','짱구'] = 100
df
 
  File "<ipython-input-81-6c54a15750ff>", line 2
    df.['과학','짱구'] = 100
       ^
SyntaxError: invalid syntax
In [82]:
#행 -> 열 단위 접근만 가능
df.loc['짱구','과학'] = 100
df
Out[82]:
  학년 성별 국어 영어 수학 과학
짱구 1 남자 40 NaN 64.0 100.0
맹구 2 여자 30 90.0 62.0 72.0
사탕 1 남자 92 70.0 NaN NaN
도적 3 여자 63 60.0 31.0 70.0
검사 4 남자 120 50.0 NaN 88.0
In [83]:
#접근하고자 하는 행이나, 
#열이 없다면 생성하여 데이터 프레임에 반영됨
df.loc['스타벅스','과학'] = 100
df
Out[83]:
  학년 성별 국어 영어 수학 과학
짱구 1.0 남자 40.0 NaN 64.0 100.0
맹구 2.0 여자 30.0 90.0 62.0 72.0
사탕 1.0 남자 92.0 70.0 NaN NaN
도적 3.0 여자 63.0 60.0 31.0 70.0
검사 4.0 남자 120.0 50.0 NaN 88.0
스타벅스 NaN NaN NaN NaN NaN 100.0
In [84]:
df.loc['커피빈','의자'] = 100
df
Out[84]:
  학년 성별 국어 영어 수학 과학 의자
짱구 1.0 남자 40.0 NaN 64.0 100.0 NaN
맹구 2.0 여자 30.0 90.0 62.0 72.0 NaN
사탕 1.0 남자 92.0 70.0 NaN NaN NaN
도적 3.0 여자 63.0 60.0 31.0 70.0 NaN
검사 4.0 남자 120.0 50.0 NaN 88.0 NaN
스타벅스 NaN NaN NaN NaN NaN 100.0 NaN
커피빈 NaN NaN NaN NaN NaN NaN 100.0
 

이 포스팅은 이젠아이티 주호쌤에게 강의를 듣고 복습하며 작성하였습니다.

In [ ]:
 

'Module > Pandas' 카테고리의 다른 글

파이썬 3차원 배열 다루기  (0) 2020.08.02
Python pandas series  (0) 2020.07.19

Python pandas series

Module/Pandas

 

 

 

안녕하세요. 오늘 포스팅은 시리즈에 관한 내용입니다.
시리즈란 무엇일까요? 시리즈는 판다스의 데이타 프레임을 이루고있는 데이터 형식이라고 볼 수있는데요,
그럼 간단하게 판다스란 무었인지 알아보고, 시리즈에 대해 포스팅 하겠습니다.

 

pandas

구조화된 데이터의 처리를 지원하는 파이썬 라이브러리.
파이썬으로 엑셀처럼 데이터를 다룰 수 있음.

 

Pandas의 자료구조

시리즈(Series) : 인덱스와 value로 구성된 numpy배열의 확장 객체 데이타프레임(dataFrame) : 열과 행으로 구성된 엑셀 스프레드시트와 같은 구조, 행과 열을 이루며, 시리즈로 이루어져 있다.

In [25]:
#필요한 모듈 세팅
from pandas import Series
 

시리즈 데이터 생성

생성자 파라미터로 리스트, numpy배열을 전달함.
리스트는 인덱스가 개념적으로 존재하나, 시리즈는 인덱스가 명시적으로 존재한다.

In [26]:
#리스트 선언
listTest = [10,20,30,40,50]
listTest
Out[26]:
[10, 20, 30, 40, 50]
In [27]:
#시리즈가공
SeriesTest = Series(listTest)
SeriesTest
Out[27]:
0    10
1    20
2    30
3    40
4    50
dtype: int64
 

시리즈 데이터 다루기

In [28]:
#인덱스를 활용하여 값 확인
print(SeriesTest[0])
print(SeriesTest[1])
print(SeriesTest[2])
 
10
20
30
In [29]:
#시리즈의 값 추출
a = SeriesTest.values
a
Out[29]:
array([10, 20, 30, 40, 50])
In [30]:
#시리즈의 값을 리스트로 변환하기
b = list(a)
b
Out[30]:
[10, 20, 30, 40, 50]
In [31]:
#시리즈에서 값을 추출하여 리스트로 만들기
list(SeriesTest.values)
Out[31]:
[10, 20, 30, 40, 50]
In [32]:
#시리즈의 인덱스만 추출하기
i = SeriesTest.index
i
Out[32]:
RangeIndex(start=0, stop=5, step=1)
In [33]:
#시리즈의 인덱스를 리스트로 변환하기
list(SeriesTest.index)
Out[33]:
[0, 1, 2, 3, 4]
 

시리즈 인덱스 지정하기

In [34]:
IndexTest1 = Series([300, 200])
IndexTest2 = Series([300, 200], index=['커피', '콜라'])
print(IndexTest1)
print(IndexTest2)
 
0    300
1    200
dtype: int64
커피    300
콜라    200
dtype: int64
 

시리즈 조건을 주어 다루기

In [35]:
#일반 크기 비교
test1 = SeriesTest[SeriesTest > 30]
test1
Out[35]:
3    40
4    50
dtype: int64
In [36]:
# and
test2 = SeriesTest[SeriesTest<= 40][SeriesTest >=30]
test2
Out[36]:
2    30
3    40
dtype: int64
In [37]:
#or
test3 = SeriesTest[(SeriesTest<=10) | (SeriesTest >=40)]
test3
Out[37]:
0    10
3    40
4    50
dtype: int64
 

이 포스팅은 이젠아이티학원 주호쌤의 강의를 듣고 복습하며 작성하였습니다.

In [ ]:
 

'Module > Pandas' 카테고리의 다른 글

파이썬 3차원 배열 다루기  (0) 2020.08.02
Python Pandas DataFrame  (0) 2020.07.19

Python Numpy3

Module/Numpy

 

 

 

 

Numpy3

지난 넘피1,2에 이어 3번째 포스팅입니다.
2편에서 마무리 짓지 못하고 3번째 까지 왔네요
너무 방대한 양이다보니... 그래도 인공지능으로 넘어가기전 알고가야할 부분이니까 열심히 해야겠죠?

2편에서 마무리 짓지 못했던 numpy 특수계산, 크기비교를 알아보도록 하겠습니다.

In [86]:
import numpy as np
 

numpy all&any

any = 배열 원소값중 어떤 값들 중 하나라도 조건에 만족하면 True를 반환

all = 모든 원소값이 조건을 만족하면 True를 반환

In [87]:
test = np.arange(10)
test
Out[87]:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [88]:
np.any(test>4) #원소값중 4보다 큰 값이 존재 함으로 True
Out[88]:
True
In [107]:
np.all(test>4) #모든 원소값이 4보단 크지 않기때문에 False
Out[107]:
False
In [108]:
np.all(test>=0)#모든 원소값은 0보다 크거나 같기 때문에 True
Out[108]:
True
 

Numpy 크기 비교

In [91]:
test1 = np.array([1,20,33])
test2 = np.array([10,10,10])
print(test1>test2)#배열의 각 인덱스별 크기 비교
print(test1==test2)
print((test1>test2).any())#배열의 각인덱스별 크기 비교중 하나라도 만족한다면 True
print((test1>test2).all())#배열의 각인덱스별 크기 비교중 모두 만족한다면 True
 
[False  True  True]
[False False False]
True
False
In [113]:
#앞서 크기비교 한것을 2차원배열로 확장
test1 = np.array([[10,20,33],[11,22,33]])
test2 = np.array([[10,10,10],[100,1,0]])
print(test1>test2)
print(test1>20)
print(test1==test2)
print((test1>test2).any())
print((test1>test2).all())
 
[[False  True  True]
 [False  True  True]]
[[False False  True]
 [False  True  True]]
[[ True False False]
 [False False False]]
True
False
 

Numpy 크기 비교2

np.logical_and

np.logical_not

Np.logical_or

In [110]:
test1 = np.array([1,20,33])
np.logical_and(test1>0,test1<10)#두 조건을 만족한다면 True
Out[110]:
array([ True, False, False])
In [111]:
test2 = np.array([False,True,True])
np.logical_not(test2)#반대값 출력 
Out[111]:
array([ True, False, False])
In [112]:
test3 = np.array([False,False,True])
np.logical_or(test2,test3)#하나라도 True라면 True 반환
Out[112]:
array([False,  True,  True])
 

Numpy where

np.where(조건, 참일때 반환할 값, 거짓일때 반환할 값)

In [122]:
test1 = np.array([1,20,33])
np.where(test1>5,100,2)
Out[122]:
array([  2, 100, 100])
In [123]:
test2 = np.arange(10)
np.where(test2>4) #배열 원소값이 4보다 큰 값들의 인덱스를 반환
Out[123]:
(array([5, 6, 7, 8, 9]),)
In [129]:
test3 = np.array([1,10,4,5,6,50,1,100])
np.where(test3>4)#배열 원소값이 4보다 큰 값들의 인덱스를 반환
Out[129]:
(array([1, 3, 4, 5, 7]),)
In [125]:
test4 = np.array(["1", 2,"2" ,np.NaN, np.Inf], float)
np.isnan(test4)#Not a Number숫자가 아닌, / Infinity 무한대 
Out[125]:
array([False, False, False,  True, False])
 

Numpy argmax & argmin

In [126]:
test1 = np.array([1,10,4,5,6,50,1,100])
np.argmax(test1), np.argmin(test1)# 배열값중 최대값 , 최소값의 인덱스 추출
Out[126]:
(7, 0)
In [131]:
test2 = np.array([[111,222,333],[555,666,777],[123,633,768]])
test2,np.argmax(test2), np.argmin(test2)#다차원 배열에서도 적용가능, 인덱스를 새는 방법에 주목
Out[131]:
(array([[111, 222, 333],
        [555, 666, 777],
        [123, 633, 768]]),
 5,
 0)
In [132]:
np.argmax(test2, axis=1) , np.argmin(test2,axis=0)#axis를 활용하여 접근 / 1은 가로로, 0은 세로로
Out[132]:
(array([2, 2, 2]), array([0, 0, 0]))
 

Numpy boolean index

In [133]:
test1 =np.array([
    [1,2,3,4,5,6,7,8,9,10],
    [1,2,3,4,5,6,7,8,9,10],
    [1,2,3,4,5,6,7,8,9,10],
    [1,2,3,4,5,6,7,8,9,10],
    [1,2,3,4,5,6,7,8,9,10],
    [1,2,3,4,5,6,7,8,9,10]
])
test2 = test1 < 5#값들이 5보다 작다면 False
test2
Out[133]:
array([[ True,  True,  True,  True, False, False, False, False, False,
        False],
       [ True,  True,  True,  True, False, False, False, False, False,
        False],
       [ True,  True,  True,  True, False, False, False, False, False,
        False],
       [ True,  True,  True,  True, False, False, False, False, False,
        False],
       [ True,  True,  True,  True, False, False, False, False, False,
        False],
       [ True,  True,  True,  True, False, False, False, False, False,
        False]])
In [134]:
test2.astype(np.int)#True는 1, False는0으로 변환
Out[134]:
array([[1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 0, 0, 0, 0, 0, 0]])
 

이상으로 numpy 포스팅을 마칩니다.
너무 방대한 양이라 빠진부분들도 있습니다.
네이버 부스트코스 파이썬을 참고하였습니다.

In [ ]:
 

'Module > Numpy' 카테고리의 다른 글

Python Numpy2  (0) 2020.07.12
Python Numpy1  (0) 2020.07.12

Python Numpy2

Module/Numpy

 

 

 

 

Numpy 2

지난 Numpy 관련 첫번째 포스팅에 이어지는 2번째 기록입니다.
지난 시간에는 넘피 선언, 배열확인, 다차원 배열, 배열 재정립등에서 포스팅 하였습니다.

이번엔 슬라이싱, 특수 처리, 계산에 대하여 포스팅 하겠습니다.

In [2]:
#시작에 앞서 np 선언
import numpy as np
 

numpy indexing

numpy 인덱스 접근

In [6]:
test = np.array([[111,222,333],[555,666,777]])
print(test,'\n')#2행 3열 메트릭스 배열 
print(test[0],'\n')# 0번째 행 
print(test[0,0],'\n')#0번째 행 0번째 인덱스 요소
print(test[0][0],'\n')#0번째 행 0번째 인덱스 요소
 
[[111 222 333]
 [555 666 777]] 

[111 222 333] 

111 

111 

 

numpy slicing

numpy 슬라이싱

In [17]:
test = np.array([[111,222,333],[555,666,777],[123,633,768]])
print(test[:],'\n')#모두 출력
print(test[1:],'\n')#인덱스1행 부터 출력
print(test[:-1],'\n')#맨뒤를 제외하고 모든 인덱스행 출력
print(test[1,1:3],'\n')#인덱스1행에서 1,2인덱스 요소 출력
print(test[1,0:3],'\n')#인덱스1행에서 0,1,2인덱스 요소 출력
print(test[1,::2],'\n')#인덱스 1행에서 한칸씩 뛰고 인덱스 출력
 
[[111 222 333]
 [555 666 777]
 [123 633 768]] 

[[555 666 777]
 [123 633 768]] 

[[111 222 333]
 [555 666 777]] 

[666 777] 

[555 666 777] 

[555 777] 

 

numpy ones, zeros

모든 요소가 1또는 0인 행렬

In [84]:
test1 = np.zeros((3,4))
test2 = np.zeros(shape=(3,4))
print(test1,'\n')
print(test2)
 
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]] 

[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]
In [85]:
test1 = np.ones((3,4))
test2 = np.ones(shape=(3,4))
print(test1,'\n')
print(test2)
 
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]] 

[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]
 

numpy identity

단위행렬 (가로 세로의 길이가 같고 대각선에만 1 나머진 0)

In [30]:
np.identity(10)
Out[30]:
array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 1.]])
In [32]:
np.identity(n=4, dtype = int)
Out[32]:
array([[1, 0, 0, 0],
       [0, 1, 0, 0],
       [0, 0, 1, 0],
       [0, 0, 0, 1]])
 

numpy eye

대각선의 값이 1인 행렬생성, 대각선시작 위치를 선언 가능

In [33]:
np.eye(N=4, M=5,dtype=int)
Out[33]:
array([[1, 0, 0, 0, 0],
       [0, 1, 0, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 0, 1, 0]])
In [36]:
np.eye(N=4, M=5,k=3,dtype=int)
Out[36]:
array([[0, 0, 0, 1, 0],
       [0, 0, 0, 0, 1],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])
 

numpy diag

행렬에서 대각선에 있는 값 추출

In [47]:
test =np.arange(12).reshape(4,3)
print(test)
print(np.diag(test))
print(np.diag(test, k=1))
 
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
[0 4 8]
[1 5]
 

Numpy random sampling

데이터 분포에따른 균등분포와, 정규분포
nuiform(m,s,n)
normal(m,s,n)
m= 평균
s= 표준편차
n= 표본 수

In [51]:
np.random.uniform(0,1,10).reshape(2,5)
Out[51]:
array([[0.07207403, 0.17562454, 0.08155453, 0.61678642, 0.44434153],
       [0.69988152, 0.89725396, 0.26241236, 0.72943985, 0.47883354]])
In [52]:
np.random.normal(0,1,20).reshape(4,5)
Out[52]:
array([[-0.8667263 ,  0.23096233,  1.09094323,  0.38321506, -0.81504225],
       [ 0.9462905 ,  0.98660504,  1.85126187,  0.70032458,  0.0239339 ],
       [ 0.9048189 , -0.11227337, -1.2831095 ,  0.60489643,  0.36733851],
       [-0.15573663, -0.11809552, -0.49308224, -0.63444637, -0.3384238 ]])
 

Numpy axis

In [60]:
test = np.array([[[0,1,2],[3,4,5],[6,7,8],[111,222,333]],
                  [[9,10,11],[12,13,14],[15,16,17],[111,222,333]]])
In [61]:
test.shape
Out[61]:
(2, 4, 3)
 

(2,4,3)
= > (axis =0 , axis =1 , axis =2)
= > (테이블 , 세로(로우),가로(컬럼))

아래 numpy계산에서 한번더 보면서 생각해야합니다.

 

Numpy 계산

In [86]:
test = np.arange(1,17).reshape(4,4)
test
Out[86]:
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12],
       [13, 14, 15, 16]])
In [88]:
print(test.mean()) #모든 요소들의 평균
print(test.mean(axis = 0))#컬럼들의 평균 -> (1 + 5 + 9 + 13) / 4 = 7
print(test.mean(axis = 1))#로우의 평균 - >(1+2+3+4)/4 = 2.5
 
8.5
[ 7.  8.  9. 10.]
[ 2.5  6.5 10.5 14.5]
In [89]:
#기본 사칙 연산 가능
# + 외에 다른 사칙연산 대입하면됩니다.
test + test
Out[89]:
array([[ 2,  4,  6,  8],
       [10, 12, 14, 16],
       [18, 20, 22, 24],
       [26, 28, 30, 32]])
In [70]:
#브로드캐스팅 1
# + 외에 다른 사칙연산 대입하면됩니다.
test + 3 
Out[70]:
array([[ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19]])
In [74]:
#브로드캐스팅 2
#위 브로드캐스팅 1에선 수 와 계산 했습니다.
#이번엔 차원 수가 다른 배열끼리의 계산입니다.
#각 행마다 1,2,3,4를 각각 요소에 맞게 더해줍니다.
test2 = np.array([1,2,3,4])
test + test2
Out[74]:
array([[ 2,  4,  6,  8],
       [ 6,  8, 10, 12],
       [10, 12, 14, 16],
       [14, 16, 18, 20]])
 

numpy transpose

행과 열의 변환

In [79]:
test = np.arange(1,13).reshape(4,3)
test
Out[79]:
array([[ 1,  2,  3],
       [ 4,  5,  6],
       [ 7,  8,  9],
       [10, 11, 12]])
In [80]:
test.transpose()
Out[80]:
array([[ 1,  4,  7, 10],
       [ 2,  5,  8, 11],
       [ 3,  6,  9, 12]])
In [82]:
test.T
Out[82]:
array([[ 1,  4,  7, 10],
       [ 2,  5,  8, 11],
       [ 3,  6,  9, 12]])
 

numpy transpose2 (Dot)

행과 열의 구조가 다를때 계산

In [83]:
test.dot(test.T)
Out[83]:
array([[ 14,  32,  50,  68],
       [ 32,  77, 122, 167],
       [ 50, 122, 194, 266],
       [ 68, 167, 266, 365]])
 

numpy3에서 이어집니다.

In [ ]:
 

'Module > Numpy' 카테고리의 다른 글

Python Numpy3  (0) 2020.07.13
Python Numpy1  (0) 2020.07.12

Python Numpy1

Module/Numpy

 

 

 

 

Numpy

Numpy란?

numerical Python.
파이썬의 고성능 과학 계산용 패키지
메트릭스와 백터, 배열연산 가능.

 

Numpy 사용

범용적으로 별칭 np 사용함.

In [101]:
import numpy as np
In [102]:
test1 = np.array([0,1,2,3,4,5])#배열안의 원소값들의 데이터 형식을 지정 가능 디폴트 int
test2 = np.array([0,1,2,3,4,5,6], float)#원소값들을 플롯 형식으로지정
test3 = np.array(["0","1",2,3,4], int)#배열안에 문자값을 숫자값으로 읽어드릴 수 있다.
test4 = np.array(range(10))
In [103]:
print(test1)
print(test2)# 플롯 형식은 '0.', '1.' 식으로 저장됨
print(test3)# "0" ,"1"이 숫자로 저장됨
print(test4)
 
[0 1 2 3 4 5]
[0. 1. 2. 3. 4. 5. 6.]
[0 1 2 3 4]
[0 1 2 3 4 5 6 7 8 9]
 

Numpy type

In [104]:
#ndarray 란 넘피 디맨션 어레이 = numpy dimansion array
print(type(test1))
print(type(test2))
print(type(test3))
print(type(test4))
 
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
In [105]:
#원소값을 직접 호출 가능하다
print(type(test1[0]))
print(type(test2[1]))
print(type(test3[2]))
print(type(test4[3]))
 
<class 'numpy.int64'>
<class 'numpy.float64'>
<class 'numpy.int64'>
<class 'numpy.int64'>
 

Numpy 응용

In [106]:
#배열은 다차원으로 만들 수 있다.
test1 = np.array([[0,1,2,3,4,],[5,6,7,8,9]], float)#로우와 컬럼이 존재하는 배열로 생성
print(test1)
print(type(test1))
print(type(test1[0]))
print(type(test1[0][0]))
 
[[0. 1. 2. 3. 4.]
 [5. 6. 7. 8. 9.]]
<class 'numpy.ndarray'>
<class 'numpy.ndarray'>
<class 'numpy.float64'>
 

Numpy & shape

In [107]:
test1 = np.array([0,1,2])#컬럼만 존재 [1차원]
test2 = np.array([[0,1,2],[3,4,5]])#컬럼과 로우가 존재[2차원] 
test3 = np.array([[0,1,2],[3,4,5],["6",7,8]])#로우한줄 추가[2차원]


#3차원 배열 선언
test4 = np.array([[[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]]])

test5 = [[[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]]]

print(test1.shape)#1차원의 경우 '(3,)' 과 같이 생성된다.
print(test2.shape)#차원이 늘어날 경우 기존 값은 오른쪽으로 밀리고, 새로운 값이 왼쪽에 생성된다.
print(test3.shape)
print(test4.shape)#(3 = 공간(테이블이 3개) , 3 =3줄(row), 3 = 3칸(column))
print(np.array(test5).shape)
 
(3,)
(2, 3)
(3, 3)
(3, 3, 3)
(3, 3, 3)
 

Numpy & shape 2

ndim - number of dimension
size - data 수

In [108]:
#위에서 사용한 배열 참고
print(test1.ndim ," , ", test1.size)
print(test2.ndim ," , ", test2.size)
print(test3.ndim ," , ", test3.size)
print(test4.ndim ," , ", test4.size)#데이터의 수가 9개인 테이블이 3개 존재
print(np.array(test5).ndim ," , ", np.array(test5).size)# 3 *9 = 27
 
1  ,  3
2  ,  6
2  ,  9
3  ,  27
3  ,  27
 

Numpy & shape3

reshape

배열을 재정립함 (원하는 차원으로)

In [109]:
test1 = np.array([[0,1,2],[3,4,5],["6",7,8]])
print(test1.shape,'\n'*2)#2차원의 배열
print(test1.reshape(9,),'\n'*2)#1차원으로 변환
print(test1.reshape(3,3),'\n'*2)
print(test1.reshape(-1,3),'\n'*2)#size를 기반으로 row개수 선정
print(test1.reshape(3,1,3),'\n'*2)
 
(3, 3) 


['0' '1' '2' '3' '4' '5' '6' '7' '8'] 


[['0' '1' '2']
 ['3' '4' '5']
 ['6' '7' '8']] 


[['0' '1' '2']
 ['3' '4' '5']
 ['6' '7' '8']] 


[[['0' '1' '2']]

 [['3' '4' '5']]

 [['6' '7' '8']]] 


 

flatten

다차원 배열을 1차원으로 변환한다.

In [111]:
test = [[[0,1]],[[2,3]],[[4,5]]]#3차원 선언
print(np.array(test),'\n'*2)

print(np.array(test).shape,'\n'*2)#3차원 shape확인

print(np.array(test).flatten(),'\n'*2)#3차원을 1차원으로 변환

print(np.array(test).flatten().shape,'\n'*2)# 확인
 
[[[0 1]]

 [[2 3]]

 [[4 5]]] 


(3, 1, 2) 


[0 1 2 3 4 5] 


(6,) 


In [ ]:
 

'Module > Numpy' 카테고리의 다른 글

Python Numpy3  (0) 2020.07.13
Python Numpy2  (0) 2020.07.12