将矢量转换为矩阵:当值>时的新行X

时间:2018-02-15 15:27:36

标签: matlab matrix vector

我有一个问题,我无法找到任何解决方案,我的问题是,我有一个向量V (m x 1)V是从excel导入的数据,可以在leangth中有所不同。它包含数量> 7000的序列和数字序列<1。 7000.序列的长度也各不相同。现在我想将所有&gt; 7000的值复制到矩阵中。每当V的值达到&gt; 7000时,矩阵应该开始一个新行。为了使矩阵的新行在长度上不同,较短的行应该被填充&#34;等于0,直到达到最长行的长度。

这是它应该如何运作的一个例子。

`V [18x1]: [6000, 6500, 5000, 8000, 15000, 15500, 16000, 6000, 4000, 16500, 14000, 400, 5000, 6000, 9000, 12000, 13000, 5000]`

`Matrix [3x4]: 
1.row [8000 15000 15500 16000] 
2.row [16500 14000 0 0] 
3.row [9000 12000 13000 0]`

我想过,每当V的值得到&gt;时,首先将矢量分成几个较小的矢量。 7000.然后将它们组合到所需的矩阵并删除所有值&lt; 7000.但这对我来说似乎很不方便。

1 个答案:

答案 0 :(得分:0)

解决方案可以使用for

result = []; new_row = 1; col_num = 1; row_num = 0;
limit = 7000;
for idx = 1:length(V)
    if(V(idx) > limit && new_row == 0) % case 1
        result(row_num, col_num) = V(idx);
        col_num = col_num + 1;
    elseif(V(idx) > limit && new_row == 1) %case 2
        row_num = row_num + 1; new_row = 0; col_num = 2;
        result(row_num, 1) = V(idx);
    elseif(V(idx) <= limit) %case 3
         new_row = 1;
    end
end

case 1如果在此之前创建了一行并且在创建行之后没有V(j) < limit,则为真。

如果在此case 2之前,

V(idx-1) < limit)为真。如果case 3,则V(idx) <= limit为真。