我正在将MatLab中的一个函数转换为C++,并看到(在matlab中):
f = blocks(min:max,1:len);
值:min = 153,max = 205
这是一个二维矢量。那么,上面的代码行是否创建了一个新的2D向量,并将“块”中的所有块复制到新的向量中?
所以本质上,它本质上是一个循环,从153开始,以250结尾,然后将每个块复制到新的向量中?
希望有人能帮忙!
发布于 2012-11-16 04:52:51
该语句接受min
和max
之间的行,以及来自blocks
矩阵的1
和len
之间的列,并将它们分配给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
循环才能做到这一点。
发布于 2012-11-16 04:48:53
如果blocks
是一个2d矩阵,则该代码提取它的一个子矩阵并将其分配给变量f
。提取的子矩阵是行min
到行max
,列1
到列len
。
要获得更多信息,请阅读这。
如果您想在一个循环中这样做(在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
发布于 2012-11-16 05:14:51
这一行代码将blocks
元素153、1和205之间的子矩阵元素复制到新创建的矩阵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),而不是像matlab中所做的那样1。
更新:,否则,会有更多的性能(因为它只是一个复制while行的单个for循环)
for(ii=0; ii<=max-min; ii++)
memcpy( &f2[ii][0], &blocks[min+ii][0], sizeof(int)*(len) );
https://stackoverflow.com/questions/13416780
复制相似问题