2017-01-06 5 views
2

Что является самым простым/умным способом перехода от матрицы значений к одному горячему представлению одной и той же вещи в 3d-тензоре? Например, если матрица является индексом после Argmax в тензором, как:Однократное представление матрицы в numpy

indices=numpy.argmax(mytensor,axis=2) 

Где тензор 3D [х, у, г] и индексы, естественно, будет [х, у]. Теперь вы хотите перейти к тензору 3D [x, y, z], который имеет 1s вместо maxes по оси = 2 и 0 в любом другом месте.

P.S. Я знаю ответ для вектора в 1-горячую матрицу, но это матрица для 1-горячего тензора.

ответ

3

Один из совершенных установок для использования broadcasting -

indices[...,None] == np.arange(mytensor.shape[-1]) 

Если вам нужно в Интс из 0s и 1s, добавьте с .astype(int)

+0

Холодный ответ! Из любопытства ничего, что не использует arange? –

+0

@ A2B Используйте 'range' вместо' np.arange'? :) Что не так с использованием 'arange'? Вы ищете встроенный модуль для создания такого массива? Если это так, их нет. – Divakar

+0

@ A2B Мы можем инициализировать трехмерный выходной массив нулей, а затем присваивать значения 1s в нем на основе 'индексов'. Будет ли это «элегантно» достаточно для вас? О, подождите, нам все равно понадобится 'np.arange' для этой части индексации. – Divakar

Смежные вопросы