向Vector添加元素?

时间:2012-11-16 12:40:44

标签: matlab vector

我正在将MatLab中的一个函数转换为C ++并遇到这个问题(在ma​​tlab中):

  f = blocks(min:max,1:len);

值: min = 153,max = 205

它是2D矢量。那么上面的代码行是否会创建一个新的2D向量并将“blocks”中的所有块复制到新的向量中?

所以从本质上讲,它本质上是一个循环,从153开始,结束于250,并将每个块复制到新的向量?

希望有人可以帮忙!

3 个答案:

答案 0 :(得分:3)

该语句在minmax之间以及1len之间的行从blocks矩阵中获取行,并将它们分配给f

让我们试一试:

M = magic(5) % gives

M =

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

M2 = M(2:4,1:3) % rows 2 to 4, columns 1 to 3

M2 =

    23     5     7
     4     6    13
    10    12    19

我不太了解C ++,但可能你需要2 for个循环才能做到这一点。

答案 1 :(得分:2)

如果blocks是2d矩阵,则该代码将提取其子矩阵并将其分配给变量f。提取的子矩阵是行min到行max,行1到列len

有关详细信息,请阅读this

如果你想在循环中这样做(在matlab中效率不高,但我不知道你将如何在C ++中使用它),它与以下内容相同:

f = NaN(max-min+1,len); % allocate memory for f
for rowi=1:(max-(min-1))
    f(rowi,:) =  blocks(rowi + min-1, 1:len);
end

答案 2 :(得分:1)

该行代码将blocks的元素[153,1]和[205,len]之间的子矩阵元素复制到新创建的矩阵f。 以C语言输入:

int f[max-min+1][len]; // or float or whatever
for(int ii=0; ii<=max-min; ii++)
    for(int jj=0; jj<len; jj++)
        f[ii][jj] = blocks[ii+min][jj];

我假设现在min和max包含从0开始计数的索引(即:152和204),而不是1,就像你在matlab中那样。

<强>更新 否则,性能更高(因为只有一个for循环复制while行)

for(ii=0; ii<=max-min; ii++)
    memcpy( &f2[ii][0], &blocks[min+ii][0], sizeof(int)*(len) );