2016-12-11 2 views
0

У меня есть матрица T (60000 * 1). в каждой строке этой матрицы у меня есть одно число от 0 до 9.Производите булевую матрицу из другой матрицы в matlab

Я хочу сделать еще одну матрицу Y (60000 * 10) из матрицы T. У является булевой matrix.if матрица Т в строке 2 имеет значение 3, то матрица-строка 2 матрицы Y должен быть как

[0 0 1 0 0 0 0 0 0 0]

это мой код Mnist мой набор данных

T=MnistTrainY; 
Z = ones(length(T), 1) * [0 1 2 3 4 5 6 7 8 9]; 
Y = (Z == T); 

это работает действительно хорошо, но я хочу знать, есть ли способ, который является более эффективным, с более высокой производительностью?

ответ

2

Для создания нужной матрицы logical вы можете использовать bsxfun. Это будет выполнять элементарные проверки равенства (eq) между всеми комбинациями элементов в T и массивом 0:9.

Y = bsxfun(@eq, T, 0:9); 

Если вы на MATLAB версии R2016b или более поздней версии, вы можете удалить bsxfun, так как он будет автоматически выполнять измерения вещания.

Y = T == 0:9; 
+0

mind me ask you what is this -> @eq? – mkafiyan

+0

@mkafiyan Это дескриптор функции 'eq', который является таким же, как' == ' – Suever

+0

aha yes Я использую версию matlab R2016b, поэтому я могу использовать' Y = T == 0: 9; '. Благодарю вас: D – mkafiyan

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