Избегание петель - 3d массив - PullRequest
0 голосов
/ 13 февраля 2019

Справочная информация. У меня 1680 изображений: 7 пользователей, каждое из которых представлено 10 раз по одному из 24 английских букв на языке жестов.

Я пытаюсь изменить спецификацию изображения с буквы на массив размером 24 для каждого изображения, содержащий один 1 в позиции буквы.например, если буква A, то в первом индексе будет 1, а в остальных индексах - 0.

Я пытаюсь избежать циклов следующим образом:

def one_hot_encoding(images_array, user_array):
    letters_to_ones = np.zeros((len(user_array), len(images_array[0]), number_of_classes))
    for letter in range(number_of_classes):
        letters_to_ones[0:len(user_array)][(10*letter) : (10*letter + 9)][letter] = 1

Примечание: количество классов, определенных ранее и равное 24.

Я получаю сообщение об ошибке:

Индекс 1 выходит за пределы для оси 0 с размером0

1 Ответ

0 голосов
/ 13 февраля 2019

Попробуйте это так

number_of_classes = 24 
n_users = 7
n_images = 1624
letters_to_ones = np.zeros((n_users, n_images, number_of_classes))
for letter in range(number_of_classes):
    letters_to_ones[:, (10*letter) : (10*letter + 9), letter] = 1

Не переиндексируйте массив, выполнив a[1:2][3:4][5:6].Вместо этого используйте множественное индексирование, как я уже говорил выше: a[1:2, 3:4, 5:6].Ваш первый слайс-индекс не делает то, что вы думаете, на самом деле ваш второй слайс также индексирует в первом измерении.Вот что я имею в виду

a = np.zeros((4,3,2))
res = a[:4]
print(res.shape)
# => (4, 3, 2)

Обратите внимание, что, если мы добавили больше срезов, например, res = a[:4][:2], второй срез по-прежнему индексирует первое измерение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...