在哪里可以找到某些 Numpy 方法的效率 O(n)?
Where can I find the efficiency O(n) of some Numpy methods?
我正在做一个学校项目,他们询问了一些 Numpy 方法的效率 O(n),但我找不到它们。谁能告诉我在哪里可以找到这些?
示例方法如:
numpy.linspace(x,y,z)
numpy.meshgrid(x,y)
numpy.zeroes(x,y)
您可以简单地测量不同问题大小的执行时间来估计时间复杂度,
numpy.zeros(n)
: non-deterministic
numpy.meshgrid(x,y)
: O(n**2)
numpy.linspace(0, 1, n)
: O(n**1.6)
例如,下面是衡量 numpy.meshgrid(x,y)
的时间复杂度的代码,它也可以用于其他 numpy 函数,
In [1]: import numpy as np
...: from time import time
...: import matplotlib.pyplot as plt
...: from scipy.optimize import curve_fit
...: %matplotlib inline
...:
...: def complexity_model(x, n, A, C):
...: return A*x**n + C
...:
...: problem_size = np.logspace(2, 4, 10)
...:
...: res = []
...: for N in problem_size:
...: x = np.linspace(0, 1, N)
...: y = x.copy()
...:
...: t0 = time()
...: np.meshgrid(x,y)
...: dt = time() - t0
...: res.append(dt)
...:
...: nn = np.logspace(np.log10(problem_size.min()), np.log10(problem_size.max()), 100)
...:
...: time_to_solution = np.asarray(res)
...: fig, ax = plt.subplots(1,1)
...: ax.loglog(problem_size, time_to_solution, 'o-b')
...:
...: mask = problem_size > 100 # ignore initial points
...:
...: popt, _ = curve_fit(complexity_model, problem_size[mask],
...: time_to_solution[mask],
...: p0=(1.0, 1.0, 0.0) )
...: print(popt)
...: ax.loglog(nn, complexity_model(nn, *popt), '--k')
...:
...:
...: ax.set_xlabel('Problem size: N')
...: ax.set_ylabel('Time to solution
[ 1.94816942e+00 1.40955397e-08 -7.33862899e-04]
给出以下曲线,
对于足够大的数组大小,numpy.meshgrid(x,y)
的时间复杂度为 O(n**α)
,α = 1.95 ≈ 2
。
我正在做一个学校项目,他们询问了一些 Numpy 方法的效率 O(n),但我找不到它们。谁能告诉我在哪里可以找到这些?
示例方法如:
numpy.linspace(x,y,z)
numpy.meshgrid(x,y)
numpy.zeroes(x,y)
您可以简单地测量不同问题大小的执行时间来估计时间复杂度,
numpy.zeros(n)
: non-deterministicnumpy.meshgrid(x,y)
:O(n**2)
numpy.linspace(0, 1, n)
:O(n**1.6)
例如,下面是衡量 numpy.meshgrid(x,y)
的时间复杂度的代码,它也可以用于其他 numpy 函数,
In [1]: import numpy as np
...: from time import time
...: import matplotlib.pyplot as plt
...: from scipy.optimize import curve_fit
...: %matplotlib inline
...:
...: def complexity_model(x, n, A, C):
...: return A*x**n + C
...:
...: problem_size = np.logspace(2, 4, 10)
...:
...: res = []
...: for N in problem_size:
...: x = np.linspace(0, 1, N)
...: y = x.copy()
...:
...: t0 = time()
...: np.meshgrid(x,y)
...: dt = time() - t0
...: res.append(dt)
...:
...: nn = np.logspace(np.log10(problem_size.min()), np.log10(problem_size.max()), 100)
...:
...: time_to_solution = np.asarray(res)
...: fig, ax = plt.subplots(1,1)
...: ax.loglog(problem_size, time_to_solution, 'o-b')
...:
...: mask = problem_size > 100 # ignore initial points
...:
...: popt, _ = curve_fit(complexity_model, problem_size[mask],
...: time_to_solution[mask],
...: p0=(1.0, 1.0, 0.0) )
...: print(popt)
...: ax.loglog(nn, complexity_model(nn, *popt), '--k')
...:
...:
...: ax.set_xlabel('Problem size: N')
...: ax.set_ylabel('Time to solution
[ 1.94816942e+00 1.40955397e-08 -7.33862899e-04]
给出以下曲线,
对于足够大的数组大小,numpy.meshgrid(x,y)
的时间复杂度为 O(n**α)
,α = 1.95 ≈ 2
。