Kode berikut hanyalah contoh dari kode asli saya yaitu sebagai berikut

batch_size = 10
target_q = np.ones((10, 1))
actions = np.ones((10, ), dtype=int)
batch_index = np.arange(batch_size, dtype=np.int32)
print(target_q[batch_index, actions])
print(target_q.shape)

Saya mendapatkan kesalahan berikut IndexError: indeks 1 di luar batas untuk sumbu 1 dengan ukuran 1.

Dapatkah seseorang tolong jelaskan apa artinya ini dan bagaimana cara memperbaikinya.

Terima kasih sebelumnya.

-1
JägerBrigade 3 September 2020, 11:35

1 menjawab

Jawaban Terbaik

Di numpy Anda dapat mengindeks array ukuran N hingga indeks N-1 (sepanjang sumbu tertentu), jika tidak, Anda akan mendapatkan IndexError yang Anda lihat. Untuk memeriksa seberapa tinggi Anda dapat menggunakan indeks, Anda dapat mencetak target_q.shape. Dalam kasus Anda, ini akan memberi tahu Anda (10, 1), yang berarti bahwa jika Anda mengindeks target_q[i, j], maka i bisa maksimal 9 dan j bisa maksimal 0. Apa yang Anda lakukan di baris Anda target_q[batch_index, actions] adalah Anda memasukkan tindakan yang disebut pengindeksan mewah pada posisi kedua (j) dan actions penuh dengan yang. Jadi, Anda mencoba berkali-kali mengindeks dengan 1, sedangkan nilai indeks tertinggi yang diizinkan adalah 0. Apa yang akan berhasil:

import numpy as np

batch_size = 10
target_q = np.ones((10, 1)) 
# changed to zeros below
actions = np.zeros((10, ), dtype=int)
batch_index = np.arange(batch_size, dtype=np.int32)
print(actions)
print(target_q.shape)
print(target_q[batch_index, 0]) 
print(target_q[batch_index, actions])

Yang mencetak:

[0 0 0 0 0 0 0 0 0 0]
(10, 1)
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
0
Maciek 3 September 2020, 09:40