2014-03-27 29 views
0

我有来自不同实验的数据,堆积在列中。其中一列是实验编号,另一列是我应该分析的数据。带有嵌套切片的matlab矢量索引

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

作为一个例子:

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与数据I需要,b是实验次数。 我需要完成:

logicalINeed = [0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 0 0 ]; 
dataFroAnalysis = a(logicalINeed==1)' 

这给出了一个输出:

dataFroAnalysis = 

    6  6  6  5  5  5  5 

我知道每个实验而不是完全叠列索引:

b2_lower = 3; % index where analysis should start 
b2_upper = 5; % index where analysis should end 
b3_lower = 4; 
b3_upper = 7; 

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

c = zeros([length(a),1]); 
c(b==2(b2_lower:b2_upper)) = 1; 
c(b==3(b3_lower:b3_upper)) = 1; 

显然这不起作用,因为它应该。我尝试实现循环,但完成了很多计数器并且完全没有效率。原始数据超过100.000个条目,进行500次不同的实验。

有没有简单的索引方式来做到这一点?

回答

1

我想先看看你是如何创建这些ab载体的 - 在早期阶段没有什么可以做,以便以后处理更容易?你从哪里获得指数值?

假设你不能改变你的数据格式,而且在b数字是连续的块:

[c, ia, ic ] = unique(b); 

默认情况下ia包含每个唯一值的第一位置(每个实验即开始组)。因此,你可以工作,你的索引值偏移:

boffset = ia-1; 

boffest(n)是对与实验c(n)指数所抵消。

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

0

不知道我完全明白你在问什么,但这里有一些可能有用的东西。

首先,你可以做索引与逻辑表达式,像这样:

dataFroAnalysis = a(a~=8) 

dataFroAnalysis = 

    6  6  6  5  5  5  5 

其次,你可能会发现在“查找”命令的有用的“联盟”或“相交”一起:

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

谢谢。我给矢量一个例子的目的,只是为了简单,它有这三个值。我的目标是仅基于向量b和索引bn_lower,bn_upper上的值来获取逻辑向量。在原始问题中,我无法对a的值进行索引。 – tomasz74