import random #pip install random
# 10에서 30에 있는 숫자중 12개를 고르기
Y= random.sample(range(10, 30), 12)
print(Y)
[23, 14, 13, 21, 18, 16, 19, 10, 11, 17, 28, 24]
print(np.shape(Y))
(12,)
#이제 (12,)구조를 (3,4) 바꿔 보자.
import numpy as np
Y.reshape(3,4)
AttributeError: 'list' object has no attribute 'reshape'
list형 데이터라 reshape함수를 쓸 수 없다 한다. 그러면
Y=numpy.array(Y)
Y.reshape(3,4)
array([[23, 14, 13, 21],
[18, 16, 19, 10],
[11, 17, 28, 24]])
우리는 어떻게라도 만들 수 있다....
#이제부터가 제가 이 글을 쓰는 이유입니다.
이제 다시 2*6 형식으로 바꿔 보자
Y.reshape(2,6)
array([[23, 14, 13, 21, 18, 16],
[19, 10, 11, 17, 28, 24]])
그런데 다음과 같이 실행을 해도 결과가 같다.
Y.reshape(2,-1)
array([[23, 14, 13, 21, 18, 16],
[19, 10, 11, 17, 28, 24]])
왜냐하면 사용자가 2만 정하면 나머지는 파이썬의 "-1"기능을 이용해서
정리를 하겠다는 의미입니다. 사용자가 2를 지정했으니 12를 만들려면 2*6=12, 따라서 -1은 6이됩니다.
따라서 -1은 숫자의 의미가 아니라 변수값입니다. 그런데 숫자만 입력되는 공간에 x라고 쓸수가 없으니까
-1이라는 숫자를 입력시키고 대신 의 역할은 x등 sclar값을 가지게 됩니다.
한번 더 예를 들어보면,
Y.reshape(-1,3) 은 사용자가 3이라는 column을 정했으므로 Python은 12를 3으로 나누면 4라는 숫자를 -1로 반환합니다
즉 Y.reshape(4,3)와 같은 의미입니다.
array([[23, 14, 13],
[21, 18, 16],
[19, 10, 11],
[17, 28, 24]])
쉽죠? 더무 쉬운데 왜 -1이 필요할까라고 생각을 하면 오해이십니다. 왜냐하면 1025751857942의 길이를 [2*x]로 변환한다면
x는 얼마일까요? 3차원으로 변경한다면 또 남머지 두개 숫자는 뭐가 될까요? 등 복잡하다.
이제 마지막으로 Y.reshape(1,-1) 은 무쓴 뜻일까요?
사용자가 1이라는 숫자를 정했으므로 파이썬은 12=1*12와 같이 12를 정하게 됩니다. 따라서
Y.reshape(1,-1) = Y.shape(1,12)
array([[23, 14, 13, 21, 18, 16, 19, 10, 11, 17, 28, 24]])
이제 더 파이썬에 자신감을 가지세요...
사실 며칠간 최근에 PyTorch를 집중공부를 했는데 간결하면서도 정교함을 느꼈습니다.
여러분도 참 가야할 길이 많습니다.
,