Broadcasting, numpy.newaxis
2019. 5. 26. 21:55ㆍ분석 Python/Numpy Tip
numpy를 자주 쓰다 보면 사용하면 Broadcasting!
https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
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
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 |