Numpy 5

numpy array 구조를 image로 저장하기

이미지를 호출하기 위해서는 다음과 같은 패키지가 필요하다. from PIL import Image import numpy as np 이미지를 호출하고, 이를 np.array로 변환하면 28*28 이미지는 28*28*1 차원을 가지는 array가 될 것이다. 마지막 1은 channel을 의미하며, channel이 3인 경우 RGB 컬러 이미지를 의미한다. IMG_DIR = f'../datasets/images' img_path = os.path.join(IMG_DIR, file_name + '.jpg') img = np.array(Image.open(img_path)) 위 코드는 이미지가 저장된 경로에 접근해 jpg 파일을 호출하는 코드다. 호출된 코드는 아래와 같은 구조를 가지고 있다. array 구조를..

Python 2022.06.01

array와 asarray의 차이

numpy를 사용하는 코드를 참고하다 보면 array를 사용하는 경우와 asarray를 사용하는 경우를 볼 수 있다. 그렇다면 어떤 경우에 array를 쓰고, asarray를 쓰는 것일까? 구조적으로 보면 array와 asarray는 동일하다. 다만, array의 경우 copy=True가 기본값이지만, asarray의 경우 copy=False가 기본값이다. array를 다른 변수에 할당하고 원본을 변경할 경우 array의 copy본은 변경되지 않는다. 그러나 asarray의 경우에는 원본이 변경될 경우 asarray의 복사본까지 변경된다. a = np.ones([3, 4]) a_array = np.array(a) a_asarray = np.asarray(a) a[1] = 0 print(f'a_array ..

Python/Algorithm 2022.05.09

[Recommender System] 공분산(Covariance)

추천 시스템에서는 차원 축소 기법을 사용하여 모델을 구축할 때 공분산을 다룬다. 차원 축소는 다차원 행렬을 저차원으로 보내어 희소성 문제를 일부 완화할 수 있게 만들어주는 기법이다. 지금은 행을 기준으로 계산이 이루어지면 PCA(Principal Component Analysis), 열을 기준으로 계산이 이루어지면 FA(Factor Analysis) 정도로만 이해해도 무방하다. 사용자-아이템 간 평점 행렬은 일반적으로 희소(Sparsity) 행렬이라고 부른다. 쇼핑몰에는 방대한 양의 아이템이 존재하는데, 사용자는 모든 아이템에 대해 평점을 측정하는 것이 아니고, 일부에 대해서만 평점을 부여하기 때문이다. 이전에 다루었던 SVD(Singular Value Decomposition)과 비슷한 맥락이며, 결과..

[Python] numpy - view, copy

파이썬의 리스트의 경우 다른 객체에 할당받은 후 그 객체를 변경해도 변경되지 않지만, 넘파이 array의 경우 view(원본)을 나타내기 때문에 원본이 변경되지 않게 하거나 copy를 해주어야한다. li = [x for x in range(10)] arr_li = li[:] arr_li[0] = 100 print(li) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] print(arr_li) # [100, 1, 2, 3, 4, 5, 6, 7, 8, 9] 리스트의 경우 위와 같이 객체 0번을 받아서 변경을해도 변경이 되지 않는 것을 확인할 수 있다. 복사본의 경우 변경되어 있는 것이 보인다. arr = np.arange(10) arr_view = arr[:] arr_view[0] = 100 pr..

Python/Numpy 2022.01.14

[Python] 왜 넘파이를 사용해 ?

파이썬에서 벡터와 행렬 간 연산 속도는 엄청나게 느리다. 파이썬의 속도가 느리기 때문에 빠른 계산속도가 필요한 경우 C언어로 패키지를 만들어서 진행한다. 하지만 넘파이의 경우 파이썬의 연산 속도가 느린 부분을 일부 보완해줄 수 있는 엄청나게 좋은 패키지 중 하나이다. import numpy as np import time n = 150 a = np.random.rand(n, n) b = np.random.rand(n, n) c = np.zeros([n,n]) start = time.time() for i in range(n): for j in range(n): for k in range(n): c[i][j] = a[i][k] * b[k][j] print(time.time() - start) # 4.142..

Python/Numpy 2022.01.14
반응형