<jupyter_start><jupyter_text>array- ndim : 행렬의 차원- shape: 행렬의 모양<jupyter_code># 1차원 배열 (vector)
array = np.array([0,1,2,3,4,5])
print(type(array))
print(array)
# 2차원 배열
array = np.array([[0],[1],[2]])
print(array)
array = np.array([
    [[0,1,2,3],
    [4,5,6,7],
    [8,9,10,11]],
    
    [[0,1,2,3],
    [4,5,6,7],
    [8,9,10,11]]
])
print(array)
print(array.ndim, array.shape) # 바깥에서 안으로의 모양<jupyter_output>[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]]
3 (2, 3, 4)<jupyter_text>reshape- 행렬의 모양 바꿀 수 있다.<jupyter_code>na = np.array([1,2,3,4,5,6,7,8])
na
na.reshape((2,4)) # 2 X 4 matrix change
rna = np.reshape(na, (4,2)) # 4 X 2 matrix change
rna
# 전치행렬
rna.T # 2 X 4 matrix change<jupyter_output><empty_output><jupyter_text>index- 행렬의 특정 위치 데이터 값 가져오기- 행렬 자르기<jupyter_code>array
print(array[1][1][2])
print(array[1,1,2])
result = array[1:,1:,2:]
print(result)
print(result.ndim, result.shape)
result[0].ndim
# 데이터 수정
data = np.zeros(5, dtype=int)
data
data[1] = 1
data
data[3:] = 2
data
z = np.zeros((3,4))
z
z[1:,2:] = 2
z<jupyter_output><empty_output><jupyter_text>zeros- 행렬을 만들고 안에 0으로 채워 넣는다.<jupyter_code>z = np.zeros((2,3,4))
z<jupyter_output><empty_output><jupyter_text>ones- 행렬을 만들고 안에 1을 채워 넣는다.<jupyter_code>o = np.ones([2,3,4])
print(o)
print(o.ndim, o.shape)<jupyter_output>[[[1. 1. 1. 1.]
  [1. 1. 1. 1.]
  [1. 1. 1. 1.]]

 [[1. 1. 1. 1.]
  [1. 1. 1. 1.]
  [1. 1. 1. 1.]]]
3 (2, 3, 4)<jupyter_text>eye- 단위행렬 데이터를 만든다<jupyter_code>np.eye(5)<jupyter_output><empty_output><jupyter_text>like- 행렬 안에 있는 모든 데이터를 0이나 1로 바꿀 수 있다.<jupyter_code>z
o
ls_1 = np.zeros_like(o)
print(ls_1)
print(ls_1.ndim, ls_1.shape)
ls_2 = np.ones_like(z)
print(ls_2)
print((ls_2.ndim, ls_2.shape))<jupyter_output>[[[1. 1. 1. 1.]
  [1. 1. 1. 1.]
  [1. 1. 1. 1.]]

 [[1. 1. 1. 1.]
  [1. 1. 1. 1.]
  [1. 1. 1. 1.]]]
(3, (2, 3, 4))<jupyter_text>empty- 빈 행렬을 만든다- 실제로는 빈데이터가 아니라 더미 데이터로 들어간다.<jupyter_code>a = np.empty((5,5))
a
b = np.empty((6,4))
b<jupyter_output><empty_output><jupyter_text>arange- range와 같다.- 하지만 큰 데이터에서 range보다 속도가 빠르다.<jupyter_code>np.arange(10)
np.arange(5,10)
np.arange(2,10,3)
np.arange(10,1,-2)<jupyter_output><empty_output><jupyter_text>linspace & logspace<jupyter_code>np.linspace(0,100,3)
# 2~4까지 3개로 나누기
# logx = 2, 3, 4이 되도록 하는 x값을 출력하라
print(np.logspace(2,4,3)) 
print(np.logspace(1,4,4))<jupyter_output>[   10.   100.  1000. 10000.]<jupyter_text>random- seed- rand (uniform)- randn (gaussian)- randint- shuffle- choice<jupyter_code>np.random.seed(0)
rd = np.random.rand(10)
rdn = np.random.randn(10)
print(rd)
print(rdn)
r = np.random.rand(2,3,4)
r
# 지정된 범위의 수로 행렬 만들기
r = np.random.randint(5, 10, (3,3))
r
# 시작과 끝을 모두 안적어주는 경우 : range와 비슷
r = np.random.randint(10,size=(3,3)) # 10보다 작은 수로 행렬 만들어라
r
# shuffle로 데이터 순서 바꾸기
np.random.shuffle(r)
r
# p의 확률로 range(5)를 10개 추출
print(list(range(5)))
print([0.1,0,0.3,0.6,0])
np.random.choice(5,10, p=[0.1,0,0.3,0.6,0]) # 0~4중 10개를 각 확률을 바탕으로 추출
# unique로 데이터의 유일한 값에 대한 리스트와 값의 갯수를 구할 수 있다.
index, count = np.unique(r, return_counts=True)
print(index) # unique한 값(중복제거)
print(count) # unique한 값들의 갯수<jupyter_output>[0 1 3 4 5 6 8 9]
[2 1 1 1 1 1 1 1]<jupyter_text>stack- 행렬을 쌓는 것과 같이 합치는 방법<jupyter_code>na1 = np.arange(6)
na2 = np.arange(6,12)
na1 = np.random.randint(10, size=(2,3))
na2 = np.random.randint(10, size=(2,3))
print(na1, na1.shape)
print(na2, na2.shape)
na3 = np.stack((na1,na2))
print(na3, na3.shape)
na4 = np.stack((na1,na2), axis=1)
print(na4, na4.shape)
na5 = np.stack((na1,na2), axis=2)
print(na5, na5.shape)
ls = []
for i in range(5):
    print(range(7), i, i+3)
    print(range(7)[i:i+3])
    print(list(range(7)[i:i+3]), end="\n\n")
    ls.append(range(7)[i:i+3])
ls
np.vstack(ls) # 위로 쌓아줌
np.hstack(ls) # 옆으로 쌓아줌(하나의 리스트형태)
data = [list(range(7))[i:i+3] for i in range(5)]
print(data)
np.stack(data, axis=1) # axis가 커질수록 차원이 안쪽으로 간다.<jupyter_output><empty_output><jupyter_text>concatenate 결합- 가로결합 : 행의 갯수가 같아야함.- 세로결합 : 열의 갯수가 같아야함.<jupyter_code>r1 = np.random.randint(10, size=(2,3)) #10이하의 숫자로 2X3행렬 만들기
r1
r2 = np.random.randint(10, size=(3,2)) #10이하의 숫자로 3X2행렬 만들기
r2
r3 = np.random.randint(10, size=(3,3)) #10이하의 숫자로 3X3행렬 만들기
r3
np.concatenate([r1,r3])
np.concatenate([r2,r3], axis=1)<jupyter_output><empty_output><jupyter_text>split<jupyter_code>r = np.arange(10)
r # 0앞에서부터 0으로 셈
r1 = np.split(r, [5]) # 0앞에서부터 0으로 세서 5번째에서 자름.
r1
r2 = np.split(r, [2,4,6,8])
r2
# vsplit
r = np.random.randint(10, size=(4,6))
r
np.vsplit(r, [2,3])
# hsplit
np.hsplit(r, [2])<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.2019400352733686, 'fraction_numerical': 0.08862433862433862, 'mean_word_length': 4.375592417061611, 'pattern_counts': {'":': 0, '<': 52, '<?xml version=': 0, '>': 52, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '14', 'dir': 'jupyter-structured-clean-dedup', 'id': '508206', 'license': 'MIT', 'n_tokens_mistral': 2840, 'n_tokens_neox': 2928, 'n_words': 493, 'path': 'python/02_numpy_&_pandas/10_Numpy_make_review.ipynb', 'repo_name': 'Junhojuno/TIL', 'size': '4536'}