首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Matlab中应用虚拟变量函数

在Matlab中应用虚拟变量函数
EN

Stack Overflow用户
提问于 2014-08-21 14:53:50
回答 2查看 907关注 0票数 0

我有两个不同的双变量,一个列,每个列30000行。例如:

代码语言:javascript
运行
复制
A=[53
76
41
74
34
237
43…]

B= [1985
1985
1985
…
1986
1986
…
2013…]

如果我这样做了:

代码语言:javascript
运行
复制
size(unique(A),1)
ans =261
size(unique(B),1)
ans = 27

但当我这么做的时候

代码语言:javascript
运行
复制
D1=dummyvar(A)

我得到了一个包含355个列和30000行1s和0的双矩阵,这意味着Matlab已经识别了355个不同的假人,而不是261个。

和,

代码语言:javascript
运行
复制
D2=dummyvar(B)

我也得到了,双倍与2012年的专栏,什么也是不正确的。

Matlab正在我的分类列中像预期的那样识别更多的假人,所以我肯定做错了什么,但是我不知道为什么,因为以前这个公式对我有用。有人能帮帮我吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-21 15:03:43

dummyvar(A)的列数为max(A)。这个例子应该澄清:

代码语言:javascript
运行
复制
>> A = [1;2;2;5]
A =
     1
     2
     2
     5
>> unique(A)
ans =
     1
     2
     5
>> dummyvar(A)
ans =
     1     0     0     0     0
     0     1     0     0     0
     0     1     0     0     0
     0     0     0     0     1

如果要避免那些全零列,请使用unique的第三个输出“消除A中的空白”,然后应用dummyvar

代码语言:javascript
运行
复制
>> A = [1;2;2;5]
A =
     1
     2
     2
     5
>> [~, ~, uA] = unique(A)
uA =
     1
     2
     2
     3
>> dummyvar(uA)
ans =
     1     0     0
     0     1     0
     0     1     0
     0     0     1
票数 2
EN

Stack Overflow用户

发布于 2014-08-21 15:37:10

也许这个函数是有用的

代码语言:javascript
运行
复制
function [result, columnNames] = dummyvarSmart(x)
    [columnNames, ~, indices] = unique(x);
    result = dummyvar(indices);
    columnNames = transpose(columnNames);
end

你可以这样用它

代码语言:javascript
运行
复制
>> B = sort(1983 + randi(30, 1000, 1));
>> min(B)
ans =
        1984
>> max(B)
ans =
        2013
>> [result, names] = dummyvarSmart(B);
>> size(result)
ans =
        1000        30
>> names(1:5)
ans =
        1984        1985        1986        1987        1988
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25429538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档