首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类减法(Matlab)

类减法(Matlab)
EN

Stack Overflow用户
提问于 2014-03-19 15:53:40
回答 1查看 48关注 0票数 0

实验中,某些个体(ID: 1,2,3)接受了多种治疗(治疗: A,B,C)。治疗后3次记录应答变量(时间: 0,1,2)。因此,对于ID和治疗的每一个组合,都有3个输出。

我的数据是纵向格式的,由两个对象组成: datalabel和datamatrix。

Datalabel是一个27*3单元格,它包含有关在Datamatrix double (27x1)中的结果的ID、处理和时间组合的信息。

Datalabel看起来如下:

代码语言:javascript
复制
   {'1', 'A', '0';
    '1', 'A', '1';
    '1', 'A', '2';
    '1', 'B', '0';
    '1', 'B', '1';

%datapoints in between

    '3', 'C', '1';
    '3', 'C', '2'}

Datamatrix看起来如下:

代码语言:javascript
复制
    [1;3;4;6; 8;  
%datapoints in between
     2;8]

我想做的是,对于ID和处理的每一个组合,从所有三个输出中减去时间0的输出。其结果将是一个新的27x1倍,如下所示:

代码语言:javascript
复制
    [0;2;3;0; 2;
%datapoints in between
    -1;5]

在这种情况下,这并不太困难。但是,我想找到一个通用的解决方案,无论有多少不同级别的“uur”、“处理”和“ID”,当某些动物没有接受某种治疗时,这种解决方案是有效的,当缺少观察时(对于uur=0),这种解决方案也能工作。

我希望我的问题很清楚有人能帮上忙,

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-19 16:51:07

同样,正如注释中所述,我已经有一段时间没有使用Matlab了,我完全相信有更好的方法可以做到这一点,但是使用for循环,我可以想象出如下解决方案:

代码语言:javascript
复制
for val = 1:numel(Datamatrix)
   if Datalabel{val,3} == '0'
      ToSubtract = Datamatrix(val);
   end
   ChangedDataMatrix(val) = Datamatrix(val) - ToSubtract;
end

这应该是:

  1. 根据数据标记矩阵的第三列,决定要减去什么。
  2. 只有在测试时间为0时才提取该值。
  3. 从该值中减去所有测试,直到下一次测试在0时发生。

同样,我不怀疑这可以用其他方式完成,但我现在在编程模式比Matlab更多,但我希望这能做到!!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22511350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档