首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择在第一个四分位数内排列的值,并将它们标记为逻辑'1‘

选择在第一个四分位数内排列的值,并将它们标记为逻辑'1‘
EN

Stack Overflow用户
提问于 2014-11-06 08:54:00
回答 2查看 784关注 0票数 2

例如,问题的简化版本:

A=

代码语言:javascript
复制
 0      10     50
 20     30     20
 10     70     20
 40     20     10

我想为的每一列获得逻辑标签,该列的值在第一四分位数(L)第二和第三四分位数(M)第四四分位数(N)中排列。这样,最后我就可以得到这样的输出:

L=

代码语言:javascript
复制
 1      1      0
 0      0      0
 0      0      0
 0      0      1

M=

代码语言:javascript
复制
 0      0      0
 1      1      1
 1      0      1
 0      1      0

N=

代码语言:javascript
复制
 0      0      1
 0      0      0
 0      1      0
 1      0      0

在这个4x3矩阵示例中,每个列都有4个值。第一四分位数(排名)表示值最低的四分位数,第二和第三四分位数为第二和第三最低值,第四四分位数为最高值。因此,在另一个例子中,如果一个列有40个值,那么我想为矩阵中的第一个四分位数标记最低的10个值,以此类推。

想象一下我有1000x1000矩阵..。“分位数”和“百分位数”函数不能做到这一点,因为它们不对每个单元格值进行排序。那么,我该怎么做才能做到这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-06 09:25:11

这就是你要找的吗?:

代码语言:javascript
复制
pL = prctile(A,25,1);
pU = prctile(A,75,1);

L = bsxfun(@le, A, pL);
N = bsxfun(@ge, A, pU);
M = ones(size(A))-L-N;

编辑:,如果存在NaNs,请将此用于M,而不是上面的内容:

M = ~isnan(A)-L-N;

票数 3
EN

Stack Overflow用户

发布于 2014-11-06 09:17:07

代码语言:javascript
复制
q = prctile(A, [25,75,100])

 5   15   15
30   50   35
40   70   50

我们可以使用bsxfun找到以下每一个点下面的所有数字:

代码语言:javascript
复制
B = bsxfun(@le, A, permute(q, [3,2,1]);

现在,您需要将每个矩阵(沿第三维空间)与前一个矩阵的~ (即B(:,:,2) = B(:,:,2).*~B(:,:,1))累计相乘,这既可以用循环进行,也可以像这样将其矢量化:

代码语言:javascript
复制
N = cat(3, ones(size(B,1), size(B,2)), ~B(:,:,1:end-1))
B.*N

返回:

代码语言:javascript
复制
ans(:,:,1) =

 1      1      0
 0      0      0
 0      0      0
 0      0      1

ans(:,:,2) =

 0      0      0
 1      1      1
 1      0      1
 0      1      0

ans(:,:,3) =

 0      0      1
 0      0      0
 0      1      0
 1      0      0

如果要查找不同百分位数的索引,此方法非常容易扩展:

代码语言:javascript
复制
p = [25, 75, 100];
q = prctile(A, p);
B = bsxfun(@le, A, permute(q, [3,2,1]);
N = cat(3, ones(size(B,1), size(B,2)), ~B(:,:,1:end-1))
B.*N

因此,例如,如果您想在五层中使用它,只需将p更改为[20 40 60 80 100]

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26775253

复制
相关文章

相似问题

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