首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取超过阈值的数据

提取超过阈值的数据
EN

Stack Overflow用户
提问于 2016-05-25 22:58:04
回答 1查看 106关注 0票数 0

因此,如果我有一个2000 x 4的矩阵,其中行1是时间戳,行2-4是不同变量的数据。

我要做的是从一个变量(比方说第二列)中提取数据超过某个阈值,但是我想从该值再次低于阈值时提取前100个样本和下100个样本。

EN

回答 1

Stack Overflow用户

发布于 2016-05-25 23:21:38

检测某个值是否超过阈值:

代码语言:javascript
复制
overThresh=sampleMatrix(:,columnOfInterest)>threshold;

这会创建一个与矩阵长度相同的逻辑列向量,其中'true‘表示大于阈值的元素。

现在,为了将这些区域扩展100个样本,我将使用图像处理中的一个技巧:图像扩张:

代码语言:javascript
复制
SE = strel('arbitrary', ones(100,1))
extractVector=imdilate(overThresh,SE)

现在,对于您想要的样本,extractVector为真(在它们旁边超过阈值+ 100 )。

代码语言:javascript
复制
interestingSamples=sampleMatrix(extractVector,:)

这将为您提供一个矩阵,其中包含所有列的值,但只包含您感兴趣的行。

编辑:您可以使用以下命令为每个违反阈值的事件分配标签(整数):

代码语言:javascript
复制
overthreshLabeled=bwlabel(overthresh);

现在,每个区域将由一个数字组成,而不是"true's“。其中每个数字对应于超过阈值的相邻事件的特定区域。然后,您可以遍历区域编号并提取这些值,并将它们全部放入一个单元格中(必须是一个单元格,因为它们可以有不同的长度)。

代码语言:javascript
复制
ROIs{1,max(labeledThreshold)}=[]; % preallocation

for i=1:max(labeledThreshold)
    region=labeledThreshold==i;
    extractVector=imdilate(overThresh,SE) % Note: set SE before loop
    ROIs{1,i}=sampleMatrix(extractVector,:)
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37440881

复制
相关文章

相似问题

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