2016-12-11 211 views
0

我有矩陣T(60000 * 1)。在這個矩陣的每一行中,我有一個從0到9的數字。從matlab中的另一個矩陣產生布爾矩陣

我想從T矩陣中創建另一個矩陣Y(60000 * 10)。 Y是在第2行的布爾matrix.if矩陣T具有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

您可以使用bsxfun來創建您想要的logical矩陣。這將對T中的所有元素組合和數組0:9中的所有元素組合之間的元素進行相等檢查(eq)。

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

如果你在MATLAB版本R2016b或更高版本,可以刪除bsxfun,因爲它會自動執行維廣播。

Y = T == 0:9; 
+0

介意我問你這是什麼 - > @eq? – mkafiyan

+0

@mkafiyan這是一個'eq'的函數句柄,它與'=='相同 – Suever

+0

aha是的,我使用matlab的R2016b版本,所以我可以使用'Y = T == 0:9;'。謝謝:D – mkafiyan