【问题标题】:1-of-K coding in OctaveOctave 中的 1-of-K 编码
【发布时间】:2011-12-22 15:41:03
【问题描述】:

我正在尝试在 Octave 中获取整数向量的二进制 one-of-K 编码。我有一个矢量y,比如说

y = [1 ; 2 ; 3 ; 1 ; 3]

我想要一个矩阵

Y = [1 0 0
     0 1 0
     0 0 1
     1 0 0
     0 0 1]

我可以手动构造one-of-K矩阵

Y = [];
Y = [Y y == 1];
Y = [Y y == 2];
Y = [Y y == 3];

但是当我尝试使用for 循环构建它时,

Y = [];
for i = unique(y),
    Y = [Y y == i];
endfor

出了点问题:

error: mx_el_eq: nonconformant arguments (op1 is 5x1, op2 is 3x1)

我什至不明白错误信息。我的错在哪里?

【问题讨论】:

    标签: math for-loop matrix octave


    【解决方案1】:

    好的,找到了。我希望教程告诉我这一点。

    Y = [];
    for i = unique(y)',
    %                ^
    %  -------------/
        Y = [Y y == i];
    end
    

    显然,for 从左到右循环遍历一个向量的unique 返回一个列向量,所以“不一致的参数”是@ 987654324@ (5×1) 和 unique(y) (3×1)。

    【讨论】:

      【解决方案2】:

      我认为有一种方法可以在没有循环的情况下做到这一点:

      Y = unique(y)(:,ones(1,size(y,1)))' == y(:,ones(size(unique(y),1),1))
      

      【讨论】:

      • 感谢您的关注。我更正它说 y 而不是 t。
      • 可怜的旧 Octave,迫使我们在没有 jit 的情况下用过多的内存使用来换取性能。
      猜你喜欢
      • 1970-01-01
      • 2020-11-09
      • 2017-08-22
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      相关资源
      最近更新 更多