基本的に、私は大規模な1Dベクトルを、関数を介して渡される特定のサイズのブロックに分割しようとしています。関数は2Dベクトルを返す必要があります。そうすれば、さまざまなブロックにアクセスできます。これを行うのに適したアルゴリズムを見つけましたが、それはMatlabにあり、2Dベクトル内に要素を配置する方法がわかりません。
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;
}
このコードはコンパイルされますが、ブロックのサイズを出力しようとしても、次のようになります。セグメンテーション違反:11 ..何かアイデアはありますか?
関数を介して渡されるデータは次のとおりです。N=600M = 200
誰かが私を助けてくれることを願っています、ありがとう:)