У меня есть следующий код. Я конвертирую cp_X_train из RGB в оттенки серого и объединяю его с X_train_gray.
X_train_gray = np.empty([0, 32, 32, 1])
start = timer()
for i in range(cp_X_train.shape[0]):
if i % 1000 == 0:
print(i)
end = timer()
print(end - start)
start = timer()
gray_img = cv2.cvtColor(cp_X_train[i], cv2.COLOR_BGR2GRAY)[None, :, :, None]
X_train_gray = np.concatenate((X_train_gray, gray_img), axis=0)
Я распечатываю время обработки каждые 1000 образцов.
0
0.00042258699977537617
1000
3.331055953000032
2000
9.222047281000414
3000
15.596254615000362
4000
21.37355997799932
5000
27.513121935999152
6000
33.477182841001195
7000
40.4089376539996
8000
47.39131554400046
9000
53.73745651799982
Как видите, на старте время обработки небольшое. Но по мере того, как X_train_gray становится больше, время обработки увеличивается. Как мне исправить эту ситуацию?
np.concatenate
в конце? В настоящее время вы итеративно увеличиваете массив, который неэффективен. - person EdChum   schedule 31.07.2017X_train_gray[i] = ...
. Если вам нужно знать количество изображений заранее. - person blckbird   schedule 31.07.2017numpy.concatenate
должен выделить память для нового массива, а затем каждый раз копировать данные из двух заданных массивов. Итак, вы постоянно перестраиваете растущий массив, что занимает много памяти и времени. - person ForceBru   schedule 31.07.2017np.concatenate
один раз передайте список grey_imgs - person EdChum   schedule 31.07.2017