Broadcasting, numpy.newaxis

2019. 5. 26. 21:55분석 Python/Numpy Tip

728x90

numpy를 자주 쓰다 보면 사용하면 Broadcasting!

https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html

 

Broadcasting — NumPy v1.16 Manual

Broadcasting Note See this article for illustrations of broadcasting concepts. The term broadcasting describes how numpy treats arrays with different shapes during arithmetic operations. Subject to certain constraints, the smaller array is “broadcast” acro

docs.scipy.org

weight covariance matrix를 사용할 때 다음과같이 각각의 Weight가 있다고 할 때 기존 코드에서는 제공되지 않는다.

data = np.random.normal(size=[100, 5])
weights = np.random.random(100)

def covariation(data, weights):
    weights = weights / weights.sum()
    return data.T.dot(weights[:, np.newaxis] * data)

np.cov(data.T)

https://ita9naiwa.github.io/numeric%20calculation/2018/11/10/Einsum.html

 

Einsum에 대해 간략한 정리 - 수원혼모노이현성

Einsum Notation Note Pytorch나 Tensorflow 내의 많은 글들이 외우기 너무너무너무 진짜 외우기도 어렵고, 쓰기도 어려워서, 쉽게 표현할 방법이 없나 찾아보다 정리한 글입니다. 기본적으로, Einsum is All You Need 이 글을 많이 참조했습니다. Introduction PyTorch, Tensorflow 내의 다양한 함수(Dot Products, Outer Products, Transposes ,matrix-vect

ita9naiwa.github.io

 

Pairwise distances between vectors

3가지 방법!!

X = np.random.normal(size=[1000, 100])

## broadcast를 사용해서 거리 재기
distances = ((X[:, np.newaxis, :] - X[np.newaxis, :, :]) ** 2).sum(axis=2) ** 0.5

## product를 사용해서 빠르게 계산하기

products = X.dot(X.T)
distances2 = products.diagonal()[:, np.newaxis] + products.diagonal()[np.newaxis, :]  - 2 * products
distances2 **= 0.5


## sklearn으로 쉽게 거리재기!

from sklearn.metrics.pairwise import pairwise_distances
distances_sklearn = pairwise_distances(X)
728x90

'분석 Python > Numpy Tip' 카테고리의 다른 글

Incredibly Fast Random Sampling in Python - 리뷰  (0) 2019.06.14
numpy.unique, numpy.searchsorted  (0) 2019.05.26
numpy argsort  (0) 2019.05.26
넘파이 좋은 팁이 많음!  (0) 2019.05.25
Numpy  (0) 2017.12.25