【发布时间】:2014-10-26 22:37:00
【问题描述】:
我正在寻找一种有效的矢量化方法,将类别编号的列向量扩展为标准化特征矩阵。
例如,我可能有:
octave:16> false_vals
false_vals =
-0.10000 -0.20000 -0.50000
octave:17> true_vals
true_vals =
0.90000 0.80000 0.50000
octave:18> cats
cats =
1
2
3
我想将它们组合起来创建一个矩阵,其中每一行与false_vals 相同,但由cats 标识的索引位置设置为true_vals 中的相应值。例如,它看起来像这样:
octave:19> X
X =
0.90000 -0.20000 -0.50000
-0.10000 0.80000 -0.50000
-0.10000 -0.20000 0.50000
我发现this question and answer 可以扩展给我一个随机分配:
octave:28> X = repmat(false_vals,3,1)
X =
-0.10000 -0.20000 -0.50000
-0.10000 -0.20000 -0.50000
-0.10000 -0.20000 -0.50000
octave:29> Y = repmat(true_vals,3,1)
Y =
0.90000 0.80000 0.50000
0.90000 0.80000 0.50000
0.90000 0.80000 0.50000
octave:30> L = ( rand(3,3) > 0.5 ) % This stands in for the actual logical matrix I want
L =
1 1 1
1 1 1
0 0 1
octave:31> X(L) = Y(L)
X =
0.90000 0.80000 0.50000
0.90000 0.80000 0.50000
-0.10000 -0.20000 0.50000
但我随后被困在如何用一些可以将我的cats 向量转换为的函数替换上面的rand
L =
1 0 0
0 1 0
0 0 1
即我知道我可以用逻辑矩阵做我想做的事,但不知道如何从我的向量cats 到正确的逻辑矩阵(对于L 的每一行,列位置由该行的值标识cats 向量应该是真的,所以我可以在最后一个语句中使用它。
【问题讨论】:
标签: matlab matrix octave categorical-data