【发布时间】:2012-05-24 06:16:25
【问题描述】:
我是 Matlab 的新手,只是不知道如何做一个可以在 excel 中轻松执行的简单任务。我只是想获得矩阵中单元格之间的百分比变化。我想为此任务创建一个 for 循环。数据按以下格式设置:
DAY1 DAY2 DAY3...DAY 100
主题结果
我只能执行获取两个数据点之间的百分比变化。如果跨越多天和多个主题,我将如何进行?并请提供解释
非常感谢
例如,对于第 1 天 SUBJECT1(RESULT=1)、SUBJECT2(RESULT=4)、SUBJECT3(RESULT=5)、第 2 天 SUBJECT1(RESULT=2)、SUBJECT2(RESULT=8)、SUBJECT3(RESULT= 10),第 3 天 SUBJECT1(RESULT=1),SUBJECT2(RESULT=4),SUBJECT3(RESULT=5)。 我想要百分比变化,所以输出将是第 2 天的 SUBJECT1(RESULT=100%)、SUBJECT2(RESULT=100%)、SUBJECT3(RESULT=100%)。 DAY3 SUBJECT1(RESULT=50%),SUBJECT2(RESULT=50%),SUBJECT3(RESULT=50%)
更新:
您好,感谢您的回复。对困惑感到抱歉。 zebediah49 非常接近我正在寻找的东西。例如,我的数据是 10 x 10 双倍。我只是想获得从列到列的百分比变化。例如,如果我想要所有列(从第 2:10 列)从第 1 行到第 10 行的百分比变化。我希望代码适用于任何矩阵维度(例如,1000 x 1000 双)zebediah49 你能解释一下你发布的代码吗?谢谢
更新2: zebediah49,
(数据(1:end,100)-数据(1:end,99))./data(1:end,99)
输出=[data(:,2:end)-data(:,1:end-1)]./data(:,1:end-1)*100;
观察上面的代码,我将如何修改它,以便将第 100 列用作所有其他列 (1-99) 的索引?如果我将代码更改为以下内容:
(数据(1:end,100)-数据(1:end,:))./data(1:end,:)
matlab 无法使用,因为超出了矩阵维度。我将如何实施?
更新 3
西贝迪亚49,
完美运行!!!最初我为索引创建了一个新变量,并重新计算索引以匹配矩阵,这不是一个好主意。在处理大量数据时,复制需要很长时间。 再次感谢您的贡献。
也感谢克里斯的贡献!!!我正在寻找更多关于如何在矩阵中寻址和操作数组。
【问题讨论】:
-
我不确定你想看到什么,你能提供一个例子,比如五天的输入和预期输出吗?
-
对不起,我只是不明白你的例子。你能格式化它以使预期的结构显而易见吗?例如,忽略所有 DAY1、SUBJECT1、RESULT(这只是这里的噪音)并将数字格式化为表格。
-
他想让 [[1,4,5] [2,8,10], [1,4,5]] 变成 [[1,1,1],[-.5 ,-.5,-.5]]。我认为;该示例实际上是模棱两可且自相矛盾的(1->2 是 100% 的变化;2->1 是 50% 的变化??.. 应该是 100%、-50% 或 200%、50% .)
-
啊,我想我明白了。 (是的,应该是 -50%,而不是 50%。)
标签: matlab