【发布时间】:2017-06-11 17:44:20
【问题描述】:
下面有一个简单的示例数据集:
a =
1 1 1 NaN NaN
1 1 1 NaN NaN
1 1 1 1 NaN
1 1 1 1 1
1 1 1 1 1
我想计算出每行的平均累积值。但是,cumsum 给出以下输出:
cumsum(a)
1 1 1 NaN NaN
2 2 2 NaN NaN
3 3 3 1 NaN
4 4 4 2 1
5 5 5 3 2
然后计算行平均值给出:
nanmean(a,2)
1
2
2.5
3
4
我希望能够考虑到不同列开始较晚的事实,即由于列中的数字较少 (4:5),行 (3:5) 的行平均值相对于它们的真实值减少了。
我想通过将矩阵 (a) 中每一列中第一个数字元素上方的最后一个 NaN 替换为累积矩阵中该行中其他列的平均值来实现这一点。这需要迭代地完成反映累积矩阵中的变化值。所以新矩阵首先看起来如下:
(a)
1 1 1 NaN NaN
1 1 1 *2* NaN
1 1 1 1 NaN
1 1 1 1 1
1 1 1 1 1
这会导致:
cumsum(a)
1 1 1 NaN NaN
2 2 2 2 NaN
3 3 3 3 NaN
4 4 4 4 1
5 5 5 5 2
然后迭代地,(a) 将等于:
(a)
1 1 1 NaN NaN
1 1 1 2 NaN
1 1 1 1 *3*
1 1 1 1 1
1 1 1 1 1
这会导致:
cumsum(a)
1 1 1 NaN NaN
2 2 2 2 NaN
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
这将给出所需的行意味着值:
nanmean(a,2)
1
2
3
4
5
【问题讨论】:
标签: matlab sorting matrix cumsum