import numpy as np
from numpy import ndarray
# print(np.arange(0, 10, 2))
#
# print(np.linspace(0, 10, num=6))
# 학습 모델 (러닝 모델) --> 파라미터 초기화
list_example = [[11, 11, 33, 11, 22, 33], [11,11, 22, 44, 55, 99], [33, 33, 11, 77, 88, 99]]
#print(list.index(1)) # 이 값이 처음 등장하는 위치를 반환
first_array = np.array(list_example) # int()
print(first_array)
np.savetxt("./first_array", first_array, header="this is header")
# np.save("./first_array", first_array) # .npy, .pkl >>>> .xlsx, .csv 보다 경우에 따라 수백배 빠름
# loaded_array = np.load("./first_array.npy")
loaded_array = np.loadtxt("./first_array", comments = "#") # 파일 planets 실습?
print(loaded_array)
# flattened = first_array.flatten() # copy가 반환됨
# raveled = first_array.ravel() # view가 반환됨 --> array_이름.reshape(-1)과 결과가 같음
# ravel이 연산 자체는 더 빠름
# ravel은 parsing할 수 있는 객체면 다 됨; flatten은 ndarray만 됨
# print(flattened.base)
# print(raveled.base)
# first_array = np.random.randint(0, 100, (3, 2, 4))
# print(first_array) # shape (3, 6)
# first_t = np.transpose(first_array) # view를 반환함
# # first_t = first_array.transpose() # view를 반환함
# # first_t = first_array.T # view를 반환함
# print(first_t)
# print(first_t.shape)
# print(first_t.base)
# print(np.shares_memory(first_t, first_array))
# first_t[0, 0] = -1
# print(first_array)
# print(np.unique(first_array))
# a = np.array(['a', 'b', 'b', 'c', 'a'])
# u, indices, counts = np.unique(a, return_index = True, return_counts=True)
# print(u, indices, counts)
# rng = np.random.default_rng()
#
# print(rng.random((3, 4)))
# print(np.random.random((3, 4))) # random.random() (numpy 꺼 말고 그냥 random 모듈)
# print(np.random.randint(0, 10, (3, 4))) # low는 포함; high는 미포함;; # random.randint()
# # sum, min, max, std, var, mean --> aggregator라고 함 aggregate statistic 응집/압축
# # aggregate를 하면 축이 삭제됨
# 축 삭제는 데이터 시각화를 위해? --> (스포) PCA/ICA 때 다시 보자!
# first_agg = first_array.mean(axis=1)
# print(first_agg, first_agg.shape)
# filter_example = first_array > 10 # ndarray
# print(filter_example)
# # print(first_array[filter_example]) # ndarray indexing을 하는데 ndarray를 index로 줄 수 있음!
# print(first_array[first_array > 10]) # ndarray indexing을 하는데 조건문을 index로 줄 수 있음
# first_sorted = np.sort(first_array, axis=-1) # 반환값은 copy임
# print(first_sorted)
# first_array[0,0] = -1
# print(first_array)
# print(first_sorted)
#
# # shape: 3, 6
# larger_than_10 = np.where(first_array > 10) # 튜플을 반환 (x좌표들의 배열, y좌표들의 배열)
# print(larger_than_10) # 성질: 연산이 broadcast (브로드캐스트)됨; vectorized operation; 병렬 연산
# print(type(larger_than_10))
# # zip 파이썬 기본 내장 함수
# # 여러 배열을 인자로 받아서
# # 각각에서 i번째 원소들을 묶어줌 --> zipping해줌
# # print(list(zip(larger_than_10[0], larger_than_10[1])))
#
# print(first_array)
# split_list = np.array_split(first_array, 3, axis=1)
# # split이라는 이름을 달고 구현/호출방법이 좀 다른 함수들 주의
# # e.g., scikit-learn (sklearn) --> train_test_split -> 학습 데이터 / 검증 데이터 비율을 인자로 받음
# print(split_list)