根据值的范围创建向量

Create vector based on range of values

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

示例:

我有一个向量

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

并且想要基于向量 A 的值的 3 组向量。让这些组为

结果向量将是

X = [1 2 2 1 3 3]

我该怎么做?我确信答案就在那里,但我缺少正确的搜索词。

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

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

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

或者假设您指的是第 2 组:<5 AND >=1

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

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

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

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

哪个returns:

binidx =

     1     2     2     1     3     3

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

Bin edges, specified as a vector. edges(1) is the left edge of the first bin, and edges(end) is the right edge of the last bin.

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

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

其中returns同上