首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于嵌套切片的matlab矢量索引

基于嵌套切片的matlab矢量索引
EN

Stack Overflow用户
提问于 2014-03-27 16:04:33
回答 2查看 146关注 0票数 0

我有来自不同实验的数据,堆放在列中。其中一列是实验编号,另一列是我应该分析的数据。

从数据到分析,我只需要一部分,对于单个实验,我知道一个指数,我应该从哪里开始,我应该在哪里完成。如果我的数据是否用于分析,我想要创建一个逻辑向量。

例如:

代码语言:javascript
复制
a = [8 8 8 6 6 6 8 8 8 8 8 5 5 5 5 8 8 ]';
b = [2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3]';

是向量a和我需要的数据,b是实验号。最后我要说:

代码语言:javascript
复制
logicalINeed = [0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 0 0 ];
dataFroAnalysis = a(logicalINeed==1)'

它提供了一个输出:

代码语言:javascript
复制
dataFroAnalysis =

     6     6     6     5     5     5     5

我知道每个实验的索引,但不知道全是堆叠的列:

代码语言:javascript
复制
b2_lower = 3; % index where analysis should start
b2_upper = 5; % index where analysis should end
b3_lower = 4;
b3_upper = 7;

我想简单地创建零,如果它在范围内,则改为1。

代码语言:javascript
复制
c = zeros([length(a),1]);
c(b==2(b2_lower:b2_upper)) = 1;
c(b==3(b3_lower:b3_upper)) = 1;

显然,这是不可行的,它应该。我试图实现的循环,但结束了很多计数器,根本没有效率。原始数据有100.000多个条目,有500个不同的实验。

是否有一种简单的索引方法来做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-27 16:48:47

首先,我想看看您是如何创建这些ab向量的--在早期阶段,没有什么可以使以后的处理变得更容易吗?首先,您从哪里获得索引值?

假设您不能更改数据格式,但也假定b中的数字是连续块:

代码语言:javascript
复制
[c, ia, ic ] = unique(b);

默认情况下,ia包含每个唯一值的第一个位置(即每个实验集的开始)。因此,您可以为索引值计算一个偏移量:

代码语言:javascript
复制
boffset = ia-1;  

其中boffest(n)是与实验c(n)相关的指数的偏移量。

根据索引值的存储方式,可以使用该偏移量计算出这些值在完整列中的位置。

票数 1
EN

Stack Overflow用户

发布于 2014-03-27 16:45:43

我不确定我完全明白你在问什么,但这里有几件可能有帮助的事情。

首先,可以使用逻辑表达式进行索引,如下所示:

代码语言:javascript
复制
dataFroAnalysis = a(a~=8)

dataFroAnalysis =

     6     6     6     5     5     5     5

第二,您可能会发现" find“命令很有用,以及"union”或"intersect":

代码语言:javascript
复制
index_where_5 = find(a==5);
index_where_6 = find(a==6);

index_where_5_or_6 = union(index_where_6, index_where_5);

dataFroAnalysis = a(index_where_5_or_6)

dataFroAnalysis =

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

https://stackoverflow.com/questions/22693073

复制
相关文章

相似问题

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