Как найти исходный код операции ndarray [sliceobject] = ndarray? - PullRequest
0 голосов
/ 09 января 2019

Мне нужно знать временную сложность следующей операции Python ndarray[sliceobject] = ndarray.

Чтобы достичь этого, я хотел бы взглянуть на исходный код, но я не знаю, где искать в numpy. Я использую этот репозиторий , но я не могу найти никакой документации о структуризации кода, что делает мои исследования трудоемкими.

Я проверил справочник Справочник по Numpy , но ничего не нашел об этой проблеме.

Мне нужно, чтобы эта операция была меньше, чем O (n), и хочу убедиться, что это так.

1 Ответ

0 голосов
/ 10 января 2019

Я наконец сделал несколько временных тестов и получил следующий график: 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()
...