如何找到操作ndarray [sliceobject] = ndarray的源代码?

时间:2019-01-09 13:27:07

标签: python-3.x numpy numpy-ndarray

我需要知道以下Python操作的时间复杂度      ndarray[sliceobject] = ndarray

要实现这一点,我想看一下源代码,但是我不知道在numpy中看哪里。我正在使用this repository,但找不到任何有关代码结构的文档,这使我的研究很耗时。

我检查了Guide to Numpy参考,但对此问题一无所获。

我需要将此操作小于O(n),并希望确保是这种情况。

1 个答案:

答案 0 :(得分:0)

我终于做了一些时序测试,最终得到了下面的图: enter image description here 毫无疑问,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()