创建考虑列起始点的累积矩阵

时间:2017-01-25 14:46:03

标签: matlab sorting matrix cumsum

我有一个简单的示例矩阵如下:(我正在处理的实际矩阵是674x11,而不仅仅是所有' 1'元素。)

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

我想创建一个累积矩阵,它考虑了数字元素在不同行的每列中开始的事实。我想通过将每列中第一个数字元素上方的NaN值替换为该行的平均值来实现此目的。

所以而不是:

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 

我想要实现的目标是:

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

其中元素(2,4)是a(2,1:3)的平均值,元素(3,5)是a(3,1:4)的平均值。

1 个答案:

答案 0 :(得分:1)

您可以使用NaN计算每行的平均值(忽略nanmean值)。然后,我们可以使用find来标识每个NaN所在的行,并将值替换为该行的平均值。然后我们可以使用cumsum操作

进行跟进
% Get the rows of each NaN value
bool = isnan(a);
[row,col] = find(bool);

% Compute the mean value of each row
rowmeans = nanmean(a, 2);

% Replace the NaN values with their row means
a(bool) = rowmeans(row);

% Perform the cumulative sum
result = cumsum(a);

如果您希望之后将初始NaN值保留为NaN值,则可以使用

进行跟进
result(bool) = NaN;