我有来自不同实验的数据,堆放在列中。其中一列是实验编号,另一列是我应该分析的数据。
从数据到分析,我只需要一部分,对于单个实验,我知道一个指数,我应该从哪里开始,我应该在哪里完成。如果我的数据是否用于分析,我想要创建一个逻辑向量。
例如:
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;显然,这是不可行的,它应该。我试图实现的循环,但结束了很多计数器,根本没有效率。原始数据有100.000多个条目,有500个不同的实验。
是否有一种简单的索引方法来做到这一点?
发布于 2014-03-27 16:48:47
首先,我想看看您是如何创建这些a和b向量的--在早期阶段,没有什么可以使以后的处理变得更容易吗?首先,您从哪里获得索引值?
假设您不能更改数据格式,但也假定b中的数字是连续块:
[c, ia, ic ] = unique(b);默认情况下,ia包含每个唯一值的第一个位置(即每个实验集的开始)。因此,您可以为索引值计算一个偏移量:
boffset = ia-1; 其中boffest(n)是与实验c(n)相关的指数的偏移量。
根据索引值的存储方式,可以使用该偏移量计算出这些值在完整列中的位置。
发布于 2014-03-27 16:45:43
我不确定我完全明白你在问什么,但这里有几件可能有帮助的事情。
首先,可以使用逻辑表达式进行索引,如下所示:
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 5https://stackoverflow.com/questions/22693073
复制相似问题