Matlab:在不同位置合并相同大小的阵列和NaN

时间:2016-08-02 23:21:22

标签: arrays matlab

我有这样的数组:

[1 NaN NaN]

[NaN 2 NaN]

[NaN NaN 3]

如何将它们合并到

[1 2 3]

4 个答案:

答案 0 :(得分:1)

您可以将所有矩阵连接成一个大矩阵,然后使用逻辑索引来取出数字:

A = [1 NaN NaN 1];
B = [NaN 2 1 NaN];
C = [3 NaN 2 3];

D = [A B C];
E = D(~isnan(D))

现在E看起来像这样:

E =

     1     1     2     1     3     2     3

答案 1 :(得分:1)

将向量连接到矩阵中,然后计算丢弃NaN的每列的平均值:

vectors = {[1 NaN NaN], [NaN 2 NaN], [NaN NaN 3]};
result = mean(vertcat(vectors{:}), 1, 'omitnan'); % or nanmean(vertcat(vectors{:}),1)

答案 2 :(得分:0)

您可以用零替换NaN

x = [1 NaN NaN]
y = [NaN 2 NaN]
z = [NaN NaN 3]
x(isnan(x)) = 0 
y(isnan(y)) = 0 
z(isnan(z)) = 0
x + y + z 

答案 3 :(得分:0)

你可以将所有矩阵组合起来(这将A放在B的顶部):

C = [A ; B];

然后你可以检测到不是NaN的细胞:

D = ~isnan(C);

之后,您可以选择这些逻辑:

e = C(D);

现在这是一个垂直向量,您可以将其设为水平:

e = e';