我需要知道以下Python操作的时间复杂度
ndarray[sliceobject] = ndarray
。
要实现这一点,我想看一下源代码,但是我不知道在numpy中看哪里。我正在使用this repository,但找不到任何有关代码结构的文档,这使我的研究很耗时。
我检查了Guide to Numpy参考,但对此问题一无所获。
我需要将此操作小于O(n),并希望确保是这种情况。
答案 0 :(得分:0)
我终于做了一些时序测试,最终得到了下面的图:
毫无疑问,ndarray[sliceobject]=ndarray
是O(n),其中n是第二个ndarray
的大小。
我的测试基本上包括构造一个固定大小的二维ndarray
A,其中设置了B,一个大小可变的ndarray
。测试代码在这里:
import time
import numpy as np
import matplotlib.pyplot as plt
start = time.time()
step = 70000
iterations = 10000
nb_elements = step*iterations
matrix_width = step
matrix_height = iterations
A = np.arange(nb_elements).reshape(matrix_height,matrix_width)
plt.xlabel('n')
plt.ylabel('Temps(secondes)')
xValues = []
yValues = []
for n in range(0,iterations):
B = np.arange(nb_elements*(n+1),nb_elements*(n+1)+(step* (n+1))).reshape((n+1),step)
idx = slice(0,(n+1),1)
start = time.time()
A[idx] = B
end = time.time()
print("step : "+str(n))
xValues.append(B.size)
yValues.append(end-start)
plt.plot(xValues,yValues,'b.-')
plt.show()