donut

'파이썬'에 해당되는 글 12건

  1. 파이썬 3차원 배열 다루기
  2. Python Tensorflow 다중선형회귀
  3. Python pandas series
  4. Python Numpy2
  5. Python Numpy1
  6. 파이썬 Collections
  7. 파이썬 Enumerate & zip

파이썬 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 Tensorflow 다중선형회귀

Tensorflow/ML

 

 

 

Tenserflow

Multi_Valriable_linear_regression_study

다변량 선형 회귀

안녕하세요. 이번 포스팅은 지난번 단순선형회귀에 이은 다변량 선형회귀 입니다,
단순 선형회귀는, 주어지는 변수의 값이 하나 일때, 활용하는 수학적 해 도출방법 이라면,
다변량 선형회귀는, 주어지는 변수의 값이 여러개일경우, 활용하는 수학적 해 도출방법 입니다.

두 가지의 차이점 중에는 기울기의 갯수가 차이가 나는데요,
단순은 W의 값이 하나라면, 다변량은 변수의 갯수만큼 W도 동일하게 필요합니다.

필요한 모듈 세팅

In [244]:
#필요한 모듈 세팅
import tensorflow as tf
import numpy as np
#텐서플로우 버전 확인
print(tf.__version__)
 
2.1.0
 

tf.random.set.seed()

tf.random.set.seed()에 대해 잠시 알아보겠습니다. 초기값을 지정해주는 역활을 합니다.

아래 예 2가지를 보면, tf.random.set.seed()를 지정하지 않았을땐 난수가 계속 생성되는데, tf.random.set.seed()를 지정하면, 난수가 고정되어 나오는 걸 확인 할 수있습니다.

In [245]:
for i in range(10):
    a = tf.Variable(tf.random.uniform((1,), -1.0, 1.0))
    b = tf.Variable(tf.random.uniform((1,), -1.0, 1.0))
    print(a.numpy(),b.numpy())
 
[-0.9770107] [0.591779]
[0.30865002] [-0.05309939]
[-0.1618216] [-0.49061823]
[0.17057109] [0.10782146]
[0.43805528] [0.7680428]
[0.12983441] [-0.6269345]
[0.24475026] [0.36410904]
[-0.95035076] [-0.19002509]
[-0.8641336] [-0.9135275]
[0.48756957] [0.6700702]
In [246]:
for i in range(10):
    tf.random.set_seed(0)
    a = tf.Variable(tf.random.uniform((1,), -1.0, 1.0))
    b = tf.Variable(tf.random.uniform((1,), -1.0, 1.0))
    print(a.numpy(),b.numpy())
 
[-0.41604972] [0.11082816]
[-0.41604972] [0.11082816]
[-0.41604972] [0.11082816]
[-0.41604972] [0.11082816]
[-0.41604972] [0.11082816]
[-0.41604972] [0.11082816]
[-0.41604972] [0.11082816]
[-0.41604972] [0.11082816]
[-0.41604972] [0.11082816]
[-0.41604972] [0.11082816]
 

2변량 선형회귀 -1.변수 선언

In [247]:
# tf.random.set.seed()는 변수, 여기선 W1,W2값을 고정해 주는 역활을 합니다.
# 해당 코드를 몇번을 반복해도 같은 값을 돌려주게 됩니다.
tf.random.set_seed(0)

#변수 x1, x3 선언
x1_data = [5.,0.,3.,4.,5.]
x2_data = [4.,3.,1.,2.,0.]
#정답인 y값 선언
y_data  = [1.,2.,3.,4.,5.]
 

2변량 선형회귀 -2.W초기값, learning_rate할당

In [248]:
#변수가 2개이기 때문에 W(가중치, 기울기)도 2개를 선언해 줍니다.
#tf.random.uniform 균등분포를 따르는 난수를 생성해줍니다, -10~10사이의수
W1 = tf.Variable(tf.random.uniform((1,), -10.0, 10.0))
W2 = tf.Variable(tf.random.uniform((1,), -10.0, 10.0))
b = tf.Variable(tf.random.uniform((1,), -10, 10.0))

learning_rate=tf.Variable(0.001)
 

2변량 선형회귀 -3.경사하강법으로 cost, W1,W2,b도출

In [249]:
#단순 선형회귀에서 사용한 경사하강법과 동일합니다.
for i in range(1000+1):
    #tape에 모든 with연산기록 저장
    with tf.GradientTape() as tape:
        #hypothesis(추론,공식)을 전해줍니다.
        hypothesis = W1 * x1_data + W2* x2_data+b
        cost = tf.reduce_mean(tf.square(hypothesis - y_data))
    W1_grad, W2_grad, b_grad = tape.gradient(cost, [W1,W2, b])
    W1.assign_sub(learning_rate * W1_grad)
    W2.assign_sub(learning_rate * W2_grad)
    b.assign_sub(learning_rate * b_grad)
    
    if i % 50 ==0:
        print("{:5} | {:10.6f} | {:10.4f} | {:10.4f} | {:10.6f}".format(
          i, cost.numpy(), W1.numpy()[0], W2.numpy()[0], b.numpy()[0]))
 
    0 | 522.226257 |    -3.9860 |     1.1794 |  -6.053674
   50 |  35.391602 |    -0.0499 |     2.3939 |  -5.107175
  100 |  19.473316 |     0.7045 |     2.1722 |  -4.908693
  150 |  15.734917 |     0.9508 |     1.8387 |  -4.810085
  200 |  13.626745 |     1.0862 |     1.5601 |  -4.720336
  250 |  12.331724 |     1.1771 |     1.3430 |  -4.628006
  300 |  11.495358 |     1.2404 |     1.1748 |  -4.532677
  350 |  10.919973 |     1.2838 |     1.0439 |  -4.435214
  400 |  10.494151 |     1.3123 |     0.9411 |  -4.336432
  450 |  10.155027 |     1.3298 |     0.8595 |  -4.236956
  500 |   9.867114 |     1.3391 |     0.7937 |  -4.137262
  550 |   9.610357 |     1.3423 |     0.7400 |  -4.037704
  600 |   9.373407 |     1.3409 |     0.6954 |  -3.938541
  650 |   9.149802 |     1.3361 |     0.6576 |  -3.839968
  700 |   8.935852 |     1.3288 |     0.6250 |  -3.742122
  750 |   8.729431 |     1.3197 |     0.5963 |  -3.645109
  800 |   8.529282 |     1.3092 |     0.5707 |  -3.549000
  850 |   8.334658 |     1.2978 |     0.5474 |  -3.453849
  900 |   8.145084 |     1.2857 |     0.5259 |  -3.359690
  950 |   7.960254 |     1.2732 |     0.5058 |  -3.266548
 1000 |   7.779940 |     1.2603 |     0.4867 |  -3.174435
 

2변량 선형회귀(메트릭스)

In [250]:
#이번엔 같은 예제를 메트릭스를 활용하여 도출하겠습니다.
#메트릭스를 사용하지 않았을때(위예시)와 비교하면서 확인해야합니다.

#x와, y데이터를 따로따로 주었습니다.
x_data = [
    [5.,0.,3.,4.,5.],
    [4.,3.,1.,2.,0.]
]

y_data = [1.,2.,3.,4.,5.]
tf.random.set_seed(0)


W = tf.Variable(tf.random.uniform((1,2), -10.0, 10.0))
b = tf.Variable(tf.random.uniform((1,), -10.0, 10.0))

learning_rate = tf.Variable(0.001)

for i in range(1000+1):
    with tf.GradientTape() as tape:
        hypothesis = tf.matmul(W, x_data) + b 
        cost = tf.reduce_mean(tf.square(hypothesis - y_data))

        W_grad, b_grad = tape.gradient(cost, [W, b])
        W.assign_sub(learning_rate * W_grad)
        b.assign_sub(learning_rate * b_grad)
    if i % 50 ==0:
        print("{:5} | {:10.6f} | {:10.4f} | {:10.4f} | {:10.6f}".format(
            i, cost.numpy(), W.numpy()[0][0], W.numpy()[0][1], b.numpy()[0]))
        
 
    0 | 858.094421 |    -3.9484 |    -5.7427 |   1.163832
   50 |  29.465967 |     0.4849 |    -2.7273 |   2.405365
  100 |   7.518828 |     0.9309 |    -1.9451 |   2.634386
  150 |   4.350302 |     0.8506 |    -1.5717 |   2.709365
  200 |   2.751280 |     0.7300 |    -1.3228 |   2.755810
  250 |   1.850505 |     0.6302 |    -1.1412 |   2.793313
  300 |   1.339502 |     0.5533 |    -1.0063 |   2.825848
  350 |   1.048183 |     0.4946 |    -0.9060 |   2.854856
  400 |   0.880757 |     0.4499 |    -0.8315 |   2.881201
  450 |   0.783236 |     0.4156 |    -0.7763 |   2.905494
  500 |   0.725190 |     0.3891 |    -0.7357 |   2.928197
  550 |   0.689464 |     0.3686 |    -0.7060 |   2.949652
  600 |   0.666392 |     0.3525 |    -0.6845 |   2.970117
  650 |   0.650519 |     0.3398 |    -0.6691 |   2.989786
  700 |   0.638773 |     0.3295 |    -0.6583 |   3.008808
  750 |   0.629419 |     0.3212 |    -0.6509 |   3.027293
  800 |   0.621478 |     0.3143 |    -0.6461 |   3.045323
  850 |   0.614397 |     0.3085 |    -0.6432 |   3.062964
  900 |   0.607862 |     0.3035 |    -0.6418 |   3.080263
  950 |   0.601695 |     0.2991 |    -0.6414 |   3.097257
 1000 |   0.595795 |     0.2953 |    -0.6418 |   3.113975
 

3변량 단순 선형회귀

In [251]:
#값 고정 역활
tf.random.set_seed(0)


# 데이터 세팅
x1 = [ 60.,  91.,  78.,  64.,  74.]
x2 = [ 70.,  87.,  60.,  80.,  67.]
x3 = [ 73.,  92.,  93., 99.,  71.]
Y  = [130., 170., 160., 170., 150.]

# 변수만큼 w갯수 세팅
w1 = tf.Variable(tf.random.normal((1,)))
w2 = tf.Variable(tf.random.normal((1,)))
w3 = tf.Variable(tf.random.normal((1,)))
b  = tf.Variable(tf.random.normal((1,)))


learning_rate = 0.000001
print("epoch | cost")
#경사하강법
for i in range(1000+1):
    with tf.GradientTape() as tape:
        hypothesis = w1* x1 + w2*x2 + w3*x3 + b
        cost =tf.reduce_mean(tf.square(hypothesis -Y))
        
    w1_grad, w2_grad, w3_grad, b_grad = tape.gradient(cost, [w1,w2,w3,b])
    
    w1.assign_sub(learning_rate * w1_grad)
    w2.assign_sub(learning_rate * w2_grad)
    w3.assign_sub(learning_rate * w3_grad)
    b.assign_sub(learning_rate * b_grad)
    
    if i % 500 == 0:
        print("{:5} | {:12.4f}".format(i, cost.numpy()))
 
epoch | cost
    0 |   15281.1172
  500 |     625.5705
 1000 |     538.3800
 

3변량 단순 선형회귀(메트릭스)

In [252]:
#np배열로 x와 y 선언
data = np.array([
    # X1,   X2,    X3,   y
    [ 60.,  70.,  73., 130. ],
    [ 91.,  87.,  92., 170. ],
    [ 78.,  60.,  93., 160. ],
    [ 64.,  80., 99., 170. ],
    [ 74.,  67.,  71., 150. ]
], dtype=np.float32)

# 슬라이스로, 엑스와, y를 명확히 선언및 대입
X = data[:, :-1]
y = data[:, [-1]]

#x의 변수가 3개인것을 주의
W = tf.Variable(tf.random.normal((3, 1)))
b = tf.Variable(tf.random.normal((1,)))

learning_rate = 0.000001

# hypothesis, prediction function
def predict(X):
    return tf.matmul(X, W) + b

print("epoch | cost")

n_epochs = 1000
for i in range(n_epochs+1):
    # tf.GradientTape() to record the gradient of the cost function
    with tf.GradientTape() as tape:
        cost = tf.reduce_mean((tf.square(predict(X) - y)))

    # calculates the gradients of the loss
    W_grad, b_grad = tape.gradient(cost, [W, b])

    # updates parameters (W and b)
    W.assign_sub(learning_rate * W_grad)
    b.assign_sub(learning_rate * b_grad)

    if i % 50 ==0:
        print("{:5} | {:10.6f} | {:10.4f} | {:10.4f} | {:10.6f}".format(
            i, cost.numpy(), W.numpy()[0][0], W.numpy()[1][0], b.numpy()[0]))
        
 
epoch | cost
    0 | 2483.050293 |     1.6077 |     2.4433 |  -1.174632
   50 | 812.191284 |     1.4626 |     2.2968 |  -1.176452
  100 | 760.821167 |     1.4322 |     2.2640 |  -1.176727
  150 | 749.294678 |     1.4199 |     2.2491 |  -1.176760
  200 | 738.898804 |     1.4105 |     2.2370 |  -1.176755
  250 | 728.683472 |     1.4015 |     2.2254 |  -1.176743
  300 | 718.622498 |     1.3928 |     2.2140 |  -1.176731
  350 | 708.713074 |     1.3841 |     2.2026 |  -1.176719
  400 | 698.951843 |     1.3756 |     2.1914 |  -1.176707
  450 | 689.338745 |     1.3671 |     2.1801 |  -1.176695
  500 | 679.869019 |     1.3587 |     2.1690 |  -1.176683
  550 | 670.542236 |     1.3504 |     2.1579 |  -1.176671
  600 | 661.355774 |     1.3421 |     2.1468 |  -1.176659
  650 | 652.306458 |     1.3340 |     2.1359 |  -1.176647
  700 | 643.393311 |     1.3259 |     2.1250 |  -1.176635
  750 | 634.614380 |     1.3179 |     2.1141 |  -1.176623
  800 | 625.966370 |     1.3100 |     2.1034 |  -1.176612
  850 | 617.448181 |     1.3022 |     2.0927 |  -1.176600
  900 | 609.058105 |     1.2944 |     2.0820 |  -1.176588
  950 | 600.792847 |     1.2867 |     2.0715 |  -1.176576
 1000 | 592.652344 |     1.2791 |     2.0609 |  -1.176564
 

다변량 선형회귀 요약

다변량 선형회귀는 변수를 직접 선언하는것과, 메트릭스를 통해 선언 하는 두가지 방법이 있다.

전자는 변수가 많을 경우 하나하나 모두 세팅을 해줘야하는 반면,
후자는 변수가 많아도 메트릭스를 사용해 한번만 세팅이 가능하다.

더 빠른 결과, 정확도가 높은 결과를 도출 할 수있다.

 

다변량 선형회귀 확인 및 예측(바로 위 예제를 통한)

In [253]:
#y값 확인
y
Out[253]:
array([[130.],
       [170.],
       [160.],
       [170.],
       [150.]], dtype=float32)
In [254]:
#X값 확인
X
Out[254]:
array([[60., 70., 73.],
       [91., 87., 92.],
       [78., 60., 93.],
       [64., 80., 99.],
       [74., 67., 71.]], dtype=float32)
In [255]:
#b값 확인
b
Out[255]:
<tf.Variable 'Variable:0' shape=(1,) dtype=float32, numpy=array([-1.1765639], dtype=float32)>
 

def predict(X): return tf.matmul(X, W) + b

In [256]:
#predict공식을 통한 해 도출
predict(X).numpy()
Out[256]:
array([[145.7387 ],
       [201.1421 ],
       [127.85293],
       [145.07324],
       [159.49405]], dtype=float32)
In [257]:
#x1,x2,x3값 할당한 후 예측값
predict([[ 1.,  1.,  4.]]).numpy()
Out[257]:
array([[-1.8966974]], dtype=float32)
In [258]:
#2개의 해 동시 도출
predict([[ 1.,  1.,  4.],[ 145.,  50.,  50.]]).numpy()
Out[258]:
array([[ -1.8966974],
       [236.59372  ]], dtype=float32)
In [259]:
#3개의 해 동시 도출
#특히 마지막 배열은 최초 선언시 주었던 x값임
predict([[ 1.,  1.,  4.],[ 145.,  50.,  50.],[ 74.,  67.,  71.]]).numpy()
Out[259]:
array([[ -1.8966974],
       [236.59372  ],
       [159.49405  ]], dtype=float32)
 

해당 포스팅은 부스트코스 강의와, 텐서플로우공식 홈페이지를 참고하여 작성하였습니다.

In [ ]:
 

'Tensorflow > ML' 카테고리의 다른 글

Tensorflow 다중선형회귀 공부  (0) 2020.08.07
Python Logistic Regression  (0) 2020.07.28
Python Tensorflow 단순선형회귀  (0) 2020.07.20

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 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

파이썬 Collections

Function

 

 

 

collections

콜랙션이란?
리스트, 튜플, 사전형 형식에 대한 확장 모듈이다.

앞서말한 3가지 형식에 대해 편의성, 실행, 효율을제공한다.

종류로는 아래 5가지가 있다.

from collections import deque
from collections import Counter
from collections import OrderedDict
from collections import defaultdict
from collections import namedtuple
 

deque

Stack 과 Queue를 지원하는 모듈로 기억하자. 정보처리기사에서 공부한 스텍과 큐다.
list에 비해 효율적인 자료 저장 방식을 지원한다고 한다.

deque_예시

In [18]:
from collections import deque
In [75]:
#deque 선언하여, 0~9까지의 수를 저장해줌
deque_list = deque()
for i in range(10):
    deque_list.append(i)
print(deque_list)#일반적인 리스트 [] 와는 다른 deque([])로 생성됨
print(type(deque_list))#type은 collections.deque로 확인
 
deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
<class 'collections.deque'>
In [76]:
deque_list.appendleft(777)#appendleft로 왼쪽에 원하는 요소 삽입가능
print(deque_list)
 
deque([777, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [77]:
deque_list.append(999)#디폴트로 오른쪽에 들어감
print(deque_list)
 
deque([777, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 999])
In [78]:
deque_list.rotate(3)#값을 오른쪽으로 3칸 이동한다. 리스를 벗어나게 되는 오른쪽 3개의 값들은 왼쪽으로 온다.
print(deque_list)
 
deque([8, 9, 999, 777, 0, 1, 2, 3, 4, 5, 6, 7])
In [79]:
print(deque(reversed(deque_list)))#요소의 순서를 역으로 한다.
 
deque([7, 6, 5, 4, 3, 2, 1, 0, 777, 999, 9, 8])
In [80]:
deque_list.extend(['ㄱ',555,'A'])#요소에 값을 추가함 디폴트는 오른쪽
print(deque_list)
 
deque([8, 9, 999, 777, 0, 1, 2, 3, 4, 5, 6, 7, 'ㄱ', 555, 'A'])
In [81]:
deque_list.extendleft(['','donut',888])#왼쪽으로 추가 가능
print(deque_list)
 
deque([888, 'donut', '', 8, 9, 999, 777, 0, 1, 2, 3, 4, 5, 6, 7, 'ㄱ', 555, 'A'])
In [82]:
print(deque_list.pop())#제일 오른쪽 값을 삭제및 선택
print(deque_list)#맨 오른쪽 값이 삭제된 상태
 
A
deque([888, 'donut', '', 8, 9, 999, 777, 0, 1, 2, 3, 4, 5, 6, 7, 'ㄱ', 555])
 

deque 와 list속도비교

In [84]:
from collections import deque
import time

시작시간 = time.time()
deque_list = deque()

for i in range(10000):
    for i in range(10000):
        deque_list.append(i)
        deque_list.pop()
print(time.time() - 시작시간, "초")
 
11.865183115005493 초
In [85]:
from collections import deque
import time

시작시간 = time.time()
일반리스트 = []

for i in range(10000):
    for i in range(10000):
        일반리스트.append(i)
        일반리스트.pop()
print(time.time() - 시작시간, "초")
 
28.828917980194092 초
 

OrderedDict

일반 dict형과 달리 데이터의 순서를 조작하여 dict를 반환한다.

OrderedDict_예시

In [115]:
test1 = {}
test1['x'] = 1
test1['y'] = 2
test1['z'] = 3
test1['l'] = 9

for i,v in test1.items():
    print(i,v)
print(test1)
 
x 1
y 2
z 3
l 9
{'x': 1, 'y': 2, 'z': 3, 'l': 9}
In [116]:
from collections import OrderedDict

test2 = OrderedDict()
test2['x'] = 1
test2['y'] = 2
test2['z'] = 3
test2['a'] = 9

for i,v in test2.items():
    print(i,v)
print(test2)
 
x 1
y 2
z 3
a 9
OrderedDict([('x', 1), ('y', 2), ('z', 3), ('a', 9)])
In [113]:
#key값을 기준으로 정렬
for i,v in OrderedDict(sorted(test2.items(),key =lambda x: x[0])).items():
    print(i,v)
 
a 9
x 1
y 2
z 3
In [117]:
#value값을 기준으로 정렬
for i,v in OrderedDict(sorted(test2.items(),key =lambda x: x[1])).items():
    print(i,v)
 
x 1
y 2
z 3
a 9
 

defaultdict

Dict에 기본값을 지정하고, 신규값 생성시 활용한다.

In [172]:
from collections import defaultdict
d= defaultdict()
d = defaultdict(lambda: 2) #디폴트값 2 설정
print(d["first"])
 
2
In [173]:
text = "아침 점심 저녁으로 라면을 밥으로 먹자 아침에 일찍 일어나서 밥을 먹자 점심엔 밥을 안먹고 치킨을 먹자".split()
print(text)
 
['아침', '점심', '저녁으로', '라면을', '밥으로', '먹자', '아침에', '일찍', '일어나서', '밥을', '먹자', '점심엔', '밥을', '안먹고', '치킨을', '먹자']
In [175]:
from collections import OrderedDict
word_count = defaultdict(object)
#디폴트 값을 10으로 지정했기 때문에 모든 요소가 10부터 카운트가 된다.
word_count = defaultdict(lambda : 10)
for word in text:
    word_count[word] +=1
for i, v in OrderedDict(sorted(word_count.items(),key=lambda t: t[1],reverse =True)).items():
    print(i,v)
 
먹자 13
밥을 12
아침 11
점심 11
저녁으로 11
라면을 11
밥으로 11
아침에 11
일찍 11
일어나서 11
점심엔 11
안먹고 11
치킨을 11
 

Counter

숫자를 센다고 생각하면 이해하기 쉽다.
단어 단위로 수를샌다.

In [141]:
from collections import Counter

test1 = Counter()
test1 = Counter('배고프다')

print(test1)

test1 = Counter('Hellow')
print(test1)
 
Counter({'배': 1, '고': 1, '프': 1, '다': 1})
Counter({'l': 2, 'H': 1, 'e': 1, 'o': 1, 'w': 1})
In [176]:
#다음과 같이 dict선언을 통해 리스트를 생성하는것 또한 가능하다.
test2 = Counter({'aaa' : 5, 'bbb' : 2})
print(test2)
print(list(test2.elements()))
 
Counter({'aaa': 5, 'bbb': 2})
['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'bbb', 'bbb']
In [164]:
#연산기능도 제공한다.
#0과 음수는 표현하지 않는듯 하다.
test3 = Counter(a=4, b=20, c=3, d=101)
test4 = Counter(a=10, b=20, c=30, d=100)
print(test3 + test4)
print(test3 - test4)
print(test4 - test3)
print(test3 & test4)
print(test3 | test4)
 
Counter({'d': 201, 'b': 40, 'c': 33, 'a': 14})
Counter({'d': 1})
Counter({'c': 27, 'a': 6})
Counter({'d': 100, 'b': 20, 'a': 4, 'c': 3})
Counter({'d': 101, 'c': 30, 'b': 20, 'a': 10})
 

namedtuple

사실 이부분은 어렵다.. 아직 이해가 덜 되는 부분임으로 조금더 공부를 하고 익혀야겠다.

In [168]:
from collections import namedtuple
test = namedtuple('test', ['x','y'])
t = test(11,y=22)
print(t[0] + t[1])
 
33
In [171]:
x,y = t
print(x,y)
print(t.x + t.y)
print(test(x=11,y=22))
 
11 22
33
test(x=11, y=22)
 

부스트 코스 강의 내용을 참고하여 작성하였습니다.
나름 응용도 하였고, 각색 하여 여러 경우의 수를 생각해보았습니다.

사실 basic이라고 하기엔 다소 어려운 내용인데요,
어렵기 때문에 여러번 복습 해야겠습니다.

In [ ]:
 

'Function' 카테고리의 다른 글

파이썬 Enumerate & zip  (0) 2020.07.08
파이썬 스플릿 & 조인  (0) 2020.07.07
파이썬 함수 lambda(람다)  (1) 2020.07.06
리스트 컴프리헨션  (0) 2020.07.05

파이썬 Enumerate & zip

Function

 

 

 

파이썬 enumerate

이번포스팅은 이너머레잇입니다.
이 함수는 리스트의 값을 추출할때 인덱스를 같이 추출하는 기능을 제공하죠.

바로 예제를 통해 살펴 보겠습니다.

enumerate_사용 x

In [1]:
test_list = ['one', 'two', 'three','four','five']
for i in test_list:
    print(i)
 
one
two
three
four
five
 

enumerate_사용o

In [2]:
for i,v in enumerate(test_list):
    print(i,v)
 
0 one
1 two
2 three
3 four
4 five
 

enumerate_unpacking

In [3]:
list(enumerate(test_list))
Out[3]:
[(0, 'one'), (1, 'two'), (2, 'three'), (3, 'four'), (4, 'five')]
 

enumerate_컴프리헨션

In [17]:
#문자열을 빈칸으로 스플릿 한 후, enumerate로 인덱스와함께 dict형태로 보내기
{i:j for i,j in enumerate('동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세'.split())}
Out[17]:
{0: '동해물과',
 1: '백두산이',
 2: '마르고',
 3: '닳도록',
 4: '하느님이',
 5: '보우하사',
 6: '우리나라',
 7: '만세'}
In [20]:
#문자열을 '이'로 스플릿 한 후, enumerate로 인덱스와함께 dict형태로 보내기
{i:j for i,j in enumerate('동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세'.split('이'))}
Out[20]:
{0: '동해물과 백두산', 1: ' 마르고 닳도록 하느님', 2: ' 보우하사 우리나라 만세'}
 

zip

이번에는 zip 함수에 대해 살펴 보겠습니다.
enumerate가 리스트에 인덱스를 입히기 위한 함수라면,
zip은 복수의 리스트를 다루기 위한 함수라고 보면됩니다.

역시 예제로 살펴보겠습니다.

zip_예시

In [22]:
test_list1 = ['1','2','3','4','5']
test_list2 = ['가','나','다','라','마']

for i,v in zip(test_list1,test_list2):
    print(i,v)
#리스트 두개를 합칠 수 있습니다.
 
1 가
2 나
3 다
4 라
5 마
In [26]:
test_list1 = ['1','2','3','4','5']
test_list2 = ['가','나','다','라','마']
test_list3 = ['!','@','#','$','%']

for i,v,c in zip(test_list1,test_list2,test_list3):
    print(i,v,c)
#리스트 3개도 역시 합칠 수 있습니다.
 
1 가 !
2 나 @
3 다 #
4 라 $
5 마 %
 

zip_ unpacking

In [40]:
#앞서 사용한 리스트를 활용하여 unpacking하기
a,b,c,d,e = zip(test_list1,test_list2)
print(a)
print(b)
print(c)
print(d)
print(e)
 
('1', '가')
('2', '나')
('3', '다')
('4', '라')
('5', '마')
In [42]:
#앞서 사용한 리스트를 활용하여 unpacking하기
a,b,c,d,e = zip(test_list1,test_list2,test_list3)
print(a)
print(b)
print(c)
print(d)
print(e)
 
('1', '가', '!')
('2', '나', '@')
('3', '다', '#')
('4', '라', '$')
('5', '마', '%')
 

zip _ 컴프리헨션

In [43]:
#컴프리헨션으로 각 튜플 요소들의 합을 구함
[sum(i) for i in zip((1,2,3),(10,20,30),(100,200,300))]
Out[43]:
[111, 222, 333]
 

zip_enumerate 응용

In [33]:
test_list1 = ['1','2','3','4','5']
test_list2 = ['가','나','다','라','마']

for i, (a,b) in enumerate(zip(test_list1,test_list2)):
    print(i,a,b)
 
0 1 가
1 2 나
2 3 다
3 4 라
4 5 마
In [39]:
test_list1 = ['1','2','3','4','5']
test_list2 = ['가','나','다','라','마']
v = a,b
for i, v in enumerate(zip(test_list1,test_list2)):
    print(i,v)
 
0 ('1', '가')
1 ('2', '나')
2 ('3', '다')
3 ('4', '라')
4 ('5', '마')
In [ ]:
 

'Function' 카테고리의 다른 글

파이썬 Collections  (0) 2020.07.09
파이썬 스플릿 & 조인  (0) 2020.07.07
파이썬 함수 lambda(람다)  (1) 2020.07.06
리스트 컴프리헨션  (0) 2020.07.05