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