Mempercepat penggabungan array numpy [duplikat]

Saya memiliki kode berikut. Saya mengonversi cp_X_train dari RGB ke skala abu-abu dan menggabungkannya dengan 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)

Saya mencetak waktu pemrosesan setiap 1000 sampel.

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

Seperti yang Anda lihat, pada awalnya, waktu pemrosesannya singkat. Namun seiring bertambahnya ukuran X_train_gray, waktu pemrosesan juga semakin besar. Bagaimana cara memperbaiki situasi ini?


person Lion Lai    schedule 31.07.2017    source sumber
comment
Tidak bisakah Anda menggabungkan ke daftar grey_img Anda dan kemudian memanggil np.concatenate di akhir? Saat ini Anda sedang mengembangkan array secara berulang yang tidak berkinerja baik   -  person EdChum    schedule 31.07.2017
comment
Anda juga dapat membuat X_train_gray sebagai array nol dan kemudian menimpanya dengan X_train_gray[i] = .... Jika anda harus mengetahui jumlah gambarnya terlebih dahulu.   -  person blckbird    schedule 31.07.2017
comment
numpy.concatenate harus mengalokasikan memori untuk array baru dan kemudian menyalin data dari dua array yang diberikan setiap saat. Jadi, Anda terus-menerus membangun kembali susunan yang terus bertambah, yang memerlukan banyak memori dan waktu.   -  person ForceBru    schedule 31.07.2017
comment
@EdChum: Saya tahu saya mengembangkan X_train_gray secara berulang. Tapi saya tidak tahu bagaimana cara memperbaikinya. Saya harus menyimpan setiap grey_img.   -  person Lion Lai    schedule 31.07.2017
comment
nyatakan daftar kosong di luar loop Anda, tambahkan img abu-abu Anda ke dalam loop. Setelah panggilan loop Anda np.concatenate setelah meneruskan daftar grey_imgs Anda   -  person EdChum    schedule 31.07.2017
comment
Saya dapatkan, terima kasih.   -  person Lion Lai    schedule 31.07.2017