gpt4 book ai didi

c++ - 用 C++ 重写 Matlab 代码

转载 作者:搜寻专家 更新时间:2023-10-31 00:42:31 24 4
gpt4 key购买 nike

基本上,我试图将一个巨大的一维 vector 拆分为通过函数传递的给定大小的 block 。该函数应返回一个 2D vector ,然后我就可以访问不同的 block 。我找到了一个合适的算法来执行此操作,但是,它在 Matlab 中,我不明白如何将元素放置在 2D vector 中。

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;
}

这段代码可以编译,但是,当我试图输出 block 的大小时,我得到:段错误:11..有什么想法吗?

通过函数传递的数据是:N = 600M = 200

希望有人能帮帮我,谢谢:)

最佳答案

在 c 和 c++ 中,数组索引从零开始。如果您使用数组长度函数,请记住这一点很重要。因此,您应该将 i-1 乘数替换为 i 并从零开始计数。循环条件:

for (unsigned j=1; (j < N); j++)

将从 1 开始,到 N-1 结束——总共 N-1 次。但是,

for (unsigned j=0; (j < N); j++)

将从 0 开始,到 N-1 结束——总共 N 次。

在 Matlab 中:for 循环从第一个边界开始然后在第二个边界结束

如果您觉得必须从索引 1 开始,

for (unsigned j=1; (j < N+1); j++)

将执行 N 次迭代,同时仍从 1 开始。但请记住,当您在 C/C++ 中声明数组时,第一个元素的索引为零。

关于c++ - 用 C++ 重写 Matlab 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11980911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com