我有来自不同实验的数据,堆叠成列。其中一列是实验编号,另一列是我应该分析的数据。
从数据到分析我只需要一部分,而对于单个实验,我知道一个索引,我应该从哪里开始,我应该在哪里完成。如果我的数据是用于分析,我想创建一个逻辑向量。
举个例子:
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个不同的实验。
有一种简单的索引方式吗?
答案 0 :(得分:1)
我会先看看你是如何创建这些a
和b
向量的 - 在早期阶段你是不是可以做些什么来使以后的处理更容易?你从哪里获得索引值?
假设您无法改变数据格式,而且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