我有矩阵T(60000 * 1)。在这个矩阵的每一行中,我有一个从0到9的数字。
我想从T矩阵制作另一个矩阵Y(60000 * 10)。 Y是布尔矩阵。如果第2行中的矩阵T的值为3,则矩阵Y的矩阵行2必须类似于
[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);
这个工作真的很好,但我想知道有哪些方法哪个更有效,性能更好?
答案 0 :(得分:2)
您只需使用bsxfun
即可创建所需的logical
矩阵。这将对T
和数组0:9
中所有元素组合之间的相等性(eq
)执行元素检查。
Y = bsxfun(@eq, T, 0:9);
如果您使用的是MATLAB版本R2016b或更高版本,则可以删除bsxfun
,因为它会自动执行尺寸广播。
Y = T == 0:9;