2
基本上,我試圖將一個龐大的1D矢量分成一個給定大小的塊,這個大小通過函數傳遞。該函數應該返回一個2D矢量,然後我可以訪問不同的塊。我找到了一個合適的算法來做到這一點,但是,它是在Matlab中,我不明白如何將元素放置在2D矢量中。用C++重寫Matlab代碼
MATLAB代碼:
function f = block(v, N, M)
n = length(v);
maxblockstart = n - N + 1;
lastblockstart = maxblockstart - mod(maxblockstart-1 , M);
numblocks = (lastblockstart-1)/M + 1;
f = zeros(numblocks,N);
for i = 1:numblocks
for j = 1:N
f(i,j) = v((i-1)*M+j);
end
end
這是我用C嘗試++(如果它的壞對不起):
vector<iniMatrix> subBlocks(vector<int>& theData, int N, int M)
{
// This method splits the vector into blocks
// Each block has size N.
// and consecutive blocks differ
int n = theData.size();
int maxblockstart = n - N+1;
int lastblockstart = maxblockstart - (maxblockstart-1 % M);
int numblocks = (lastblockstart-1)/M + 1;
vector<int> subBlock;
vector<iniMatrix> block;
for(unsigned i=0; (i < numblocks); i++)
{
for(unsigned j=0; (j < N); j++)
{
subBlock.push_back(theData[(i-1*M+j)]);
block.push_back(subBlock);
}
}
return block;
}
此代碼編譯,但是,當即便試圖輸出塊的大小,我得到:Segmentation fault:11 ..任何想法?
的數據正通過函數傳遞是: N = 600 M = 200
我希望有人能幫助我,謝謝:)
你循環不工作?或者你只是想解釋Mathlab循環? – MimiEAM 2012-08-16 04:57:27
請解釋並且循環不起作用,錯誤:無法匹配調用'(std :: vector>)(unsigned int)'。謝謝 –
Phorce
2012-08-16 04:59:49
現在我添加了一些關於數組開始索引和matlab和C++ – 2012-08-16 05:07:43