matlab矢量索引与嵌套切片

时间:2014-03-27 16:04:34

标签: matlab indexing

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

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

举个例子:

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是实验编号。 我需要完成:

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;

显然这不起作用。我尝试实现for循环,但完成了许多计数器,根本没有效率。原始数据超过100,000个条目,500个不同的实验。

有一种简单的索引方式吗?

2 个答案:

答案 0 :(得分:1)

我会先看看你是如何创建这些ab向量的 - 在早期阶段你是不是可以做些什么来使以后的处理更容易?你从哪里获得索引值?

假设您无法改变数据格式,而且b中的数字是连续的块:

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

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

boffset = ia-1;  

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

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

答案 1 :(得分:0)

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

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

dataFroAnalysis = a(a~=8)

dataFroAnalysis =

     6     6     6     5     5     5     5

其次,您可能会发现“find”命令以及“union”或“intersect”:

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