In [1]:
import numpy as np
from scipy import spatial
In [2]:
def sim1(n):
v1 = np.random.randint(0, 100, n)
v2 = np.random.randint(0, 100, n)
return 1 - spatial.distance.cosine(v1, v2)
In [3]:
def sim2(n):
v1 = np.random.randint(0, 100, n)
v2 = np.random.randint(0, 100, n)
return np.dot(v1, v2) / np.linalg.norm(v1) / np.linalg.norm(v2)
In [4]:
import math
def sim3(n):
v1 = np.random.randint(0, 100, n)
v2 = np.random.randint(0, 100, n)
return sum(v1 * v2) / math.sqrt(sum(v1 ** 2)) / math.sqrt(sum(v2 ** 2))
In [5]:
from itertools import izip
def dot_product(v1, v2):
return sum(map(lambda x: x[0] * x[1], izip(v1, v2)))
def sim4(n):
v1 = np.random.randint(0, 100, n)
v2 = np.random.randint(0, 100, n)
prod = dot_product(v1, v2)
len1 = math.sqrt(dot_product(v1, v1))
len2 = math.sqrt(dot_product(v2, v2))
return prod / (len1 * len2)
In [6]:
%timeit sim1(400)
In [7]:
%timeit sim2(400)
In [8]:
%timeit sim3(400)
In [9]:
%timeit sim4(400)
In [10]:
from datetime import datetime as dt
In [11]:
start = dt.now()
start.date(), start.time(), start
Out[11]:
In [12]:
dt.now() - start
Out[12]:
In [13]:
import logging
fmtstr = '%(asctime)s [%(levelname)s][%(name)s] %(message)s'
datefmtstr = '%Y/%m/%d %H:%M:%S'
if len(logging.getLogger().handlers) >= 1:
logging.getLogger().handlers[0].setFormatter(logging.Formatter(fmtstr, datefmtstr))
else:
logging.basicConfig(format=fmtstr, datefmt=datefmtstr)
In [14]:
# 如果直接呼叫 logging.warning,就是使用root logger
logging.warning("please set %d in %s", 100, "length")
如果從某個module呼叫時,就用
In [15]:
# 在root logger下面增加child logger
aaa_logger = logging.getLogger('aaa')
bbb_logger = aaa_logger.getChild('bbb')
ccc_logger = bbb_logger.getChild('ccc')
In [16]:
aaa_logger.warn("hello")
In [17]:
bbb_logger.warn("hello")
In [18]:
# 當logger是樹狀結構時,logger的名稱會變成 aaa.bbb.ccc
ccc_logger.warn("hello")
In [ ]: