将空行插入具有位置的矩阵,具体取决于逻辑语句

时间:2013-11-01 14:38:25

标签: matlab

我有一个第一列“一年中的小时”的数组,其他13列是随机测量。第一列中有几个小时缺失。我想在缺少小时数的情况下插入'9999'行,同时将第一列保留为下一小时。

A=[1,3,4,76,88,3,54,6,33...;    
2,54,3,656,8,9999,65,3,4,77...;
5,34,3,6,77,4,234,9999.....]

我希望这成为:

A = [1,3,4,76,88,3,54,6,33...;  
2,54,3,656,8,9999,65,3,4,77...;   
3,9999,9999,9999,9999......   
4,9999,9999,9999,9999.....   
5,34,3,6,77,4,234,9999.....] 

一直到8760

第一个小时缺少部分数据。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这应该有效:

%% The example matrix:
A =
      1      3      4     76     88      3     54      6
      2     54      3    656      8   9999     65      3
      5     34      3      6     77      4    234   9999

B = zeros(8760, size(A,2));
B(A(:,1),:) = A;

B(B(:,1)==0,2:end) = 9999;
B(:,1) = 1:8760   % (Used 1:5 in my example below)

B =  
      1      3      4     76     88      3     54      6
      2     54      3    656      8   9999     65      3
      3   9999   9999   9999   9999   9999   9999   9999
      4   9999   9999   9999   9999   9999   9999   9999
      5     34      3      6     77      4    234   9999

答案 1 :(得分:0)

这类似于@ RobertP的答案,但是避免了一些步骤并且稍快一些:

B = [ (1:8760).' 9999*ones(8760,size(A,2)-1) ];
B(A(:,1),2:end) = A(:,2:end);