[Numpy] Shape

reshape()#

a = [[1,2,3], [4,5,6]]   # python의 중첩리스트
arr = np.array(a)        # ndarray 생성
print(arr)

print(arr.shape)         # (2,3)

arr.shape = (3,2)

print(arr)

위의 예처럼 shape속성값을 직접 변경해서 shape을 변경시키는것은 좋지 않아요! 대신 제공된 다른 함수를 이용해서 이 작업을 진행해요!

arr = np.arange(0,12,1)
print(arr)

result = arr.reshape(4,3)      # result는 ndarray가 아니예요!  => view
                               # arr이 원본 result는 데이터를 가지고 있지 않아요!

print(result)

result[3,2] = 100

print(result)
print(arr)


arr = np.arange(0,12,1)

print(arr)        # 요소가 총 12개인 ndarray를 만들었어요!
print(arr.size)   # 12

result = arr.reshape(3,5)   # shape이 맞지 않으면 view를 생성할 수 없어요!
print(result)

result = arr.reshape(2,-1)
print(result)

result = arr.reshape(-1,3)
print(result)

result = arr.reshape(2,3,-1)
print(result)

result = arr.reshape(3,4)    # result는 view가 되요! 데이터를 가지고 있지 않아요!
print(result)

result = arr.reshape(3,4).copy()    # view가 아니라 별도의 ndarray를 만들고 싶어요!
print(result)

arr[0] = 100

print(arr)
print(result)

ravel()#

a = [[1,2,3], [4,5,6]]
arr = np.array(a)
print(arr)

# 무조건 1차원 ndarray로 변경시키는 함수가 있어요!
result = arr.ravel()
print(result)

# 한가지 기억해야 할 사항은 ravel()로 변경된 결과는 ndarray가 아니라 view예요!
arr[0,0] = 100

print(arr)
print(result)

resize()#

arr = np.arange(0,12,1)

print(arr)

result = arr.resize(3,4)
print(result)
print(arr)

result = arr.resize(3,4)
result = np.resize(arr, (3,4))    # view가 아니라 다른 ndarray가 생성되요!
print(result)

arr[0] = 100

print(arr)
print(result)

result = np.resize(arr, (2,3))     # 이런게 가능하기 때문에 resize는 항상 사용에 조심!
print(result)                      # 가능한한 resize대신에 reshape을 쓰세요!