根据值范围创建矢量

时间:2015-07-27 16:42:47

标签: matlab range categorical-data bins

我想创建一个包含基于另一个向量中的值范围的值的向量。

示例:

我有一个载体

A = [-2 1 3 -1 5 6]

并且希望基于向量A的值来说出3组的向量。让组成为

  • 组1:A< 1
  • 中的值
  • 组2:A< 5和> = 1
  • 中的值
  • 第3组:A> = 5
  • 中的值

结果向量将是

X = [1 2 2 1 3 3]

我该怎么做呢?我确定答案已经存在,但我错过了正确的搜索字词。

2 个答案:

答案 0 :(得分:1)

这是逻辑索引的一个简单例子:

A = [-2 1 3 -1 5 6]

X = 2*(A<5) + 3*(A>=5);
X(A<1)=1;

或假设您的意思是第2组:&lt; 5 AND&gt; = 1

X = (A<1) + 2*(A>=1 & A<5) + 3*(A>=5);

答案 1 :(得分:0)

虽然我个人更喜欢逻辑索引,但您也可以使用histcounts。对于这种特定情况可能有点过分,但它允许您利用内置的分箱算法:

A = [-2 1 3 -1 5 6];
edges = [-inf 1 5 inf];

[~, ~, binidx] = histcounts(A, edges);

返回:

binidx =

     1     2     2     1     3     3

要设置bin边缘,您可以根据文档使用edges输入:

  

Bin边,指定为矢量。 edge(1)是the的左边缘   第一个bin,edge(end)是最后一个bin的右边缘。

如果您不需要利用任何分箱算法,也可以使用discretize

A = [-2 1 3 -1 5 6];
edges = [-inf 1 5 inf];
binidx2 = discretize(A, edges);

返回与上面相同的内容。