【问题标题】:matlab vector indexing with nested slices带有嵌套切片的matlab向量索引
【发布时间】:2014-03-28 00:48:47
【问题描述】:

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

从数据到分析,我只需要参与其中,对于单个实验,我知道我应该从哪里开始以及应该在哪里结束的索引。如果我的数据是否用于分析,我想创建一个逻辑向量。

举个例子:

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;

我想简单地创建零并在范围内更改为一

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

显然这不能正常工作。我尝试实现 for 循环,但完成了许多计数器并且根本没有效率。原始数据是超过 100.000 个条目,包含 50000 次不同的实验。

有没有一种简单的索引方法可以做到这一点?

【问题讨论】:

    标签: matlab indexing


    【解决方案1】:

    首先我会看看您是如何创建这些 a 和 b 向量的 - 您是否可以在早期阶段采取任何措施来简化后期处理?首先从哪里获取索引值?

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

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

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

    boffset = ia-1;  
    

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

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

    【讨论】:

      【解决方案2】:

      我不确定我是否完全理解您的要求,但这里有几件事可能会有所帮助。

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

      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
      

      【讨论】:

      • 谢谢。我给向量 a 只是为了举例,只是为了简单起见,它有这三个值。我的目标是仅根据向量 b 和索引 bn_lower、bn_upper 上的值来获取逻辑向量。在原始问题中,我无法对 a 的值进行索引。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      • 2017-11-17
      • 1970-01-01
      相关资源
      最近更新 更多