matlab生成one-hot向量

对于单标签数据,其 label 可能是用一个整数表示,想转化成 one-hot label。注意原 class IDs 可能是 0-base 的,要 +1 转成 1-base。

Code

N_CLASS = 10;
labels = [1 3 2 5 0 4];  % 0-base
% isvector(labels)
% isrow(labels)
% iscolumn(labels)
% isa(int32(labels), 'integer')
% class(labels)
L = onehot(int32(labels + 1), N_CLASS);  % shift to 1-base
disp(L);


function L = onehot(vec, n_class)
% convert sparse class IDs to one-hot label vectors
% Input:
%   vec: [1, n] row or [n, 1] column vector
%   n_class: int, # of classes
% Output:
%   L: [n, n_class] one-hot class label vectors
%----------------------------------------------
    assert(isvector(vec), "`vec` must be a vector");
    assert(isa(vec, 'integer'), "`vec` must be integers");
    if isrow(vec)
        vec = vec';  % -> column vector
    end
    I = eye(n_class);
    L = I(vec, :);
end

References

  1. isvector
  2. 求高效的方法判断一个向量是行向量还是列向量
  3. matlab 判断对象的数据类型isa()
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值