用C++重写 Matlab 代码
Re-writing Matlab code in C++
基本上,我正在尝试将大量的一维向量拆分为通过函数传递的给定大小的块。该函数应该返回一个 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
希望有人能帮到我,谢谢:)
在 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++ 中声明数组时,第一个元素的索引为零。
相关文章:
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 为什么这段代码(在 Matlab 的 MEX 文件中使用 OpenMP)给出不同的结果?
- 这个 matlab 代码的C++等价物是什么(fread matlab vs fread C/C++)?
- 如何将 MATLAB 图像处理库内置函数转换为 MATLAB 编码器代码生成不支持的 C++?
- 在CMD中运行MATLAB代码,然后等待完成
- 使用 MATLAB 编码器将代码从注册估算器应用程序导出到C++
- 使用带有 MEX 包装器的帮助程序 C 文件从 MATLAB 2016 调用C++代码时出现问题
- 可以在没有MATLAB安装的情况下执行C 到MATLAB代码接口
- 想要将此 Matlab 代码转换为 OpenCV 代码
- 如何使用C 代码调用MATLAB自定义函数
- 来自MATLAB的代码优化直方图C
- 使用MATLAB通过MEX运行OPENCV代码在VisualStudio上可以使用
- 当未选择 /CLR时,编译的MATLAB代码崩溃
- 使用 sge 集群在 Matlab 下运行C++代码
- Matlab 编码器错误 "for loop index expressions.." 如何修改代码?
- 如何使用'Build Model'函数从 matlab simulink 块生成 c/c++ 代码?
- 在C 或MATLAB中用于图像的CRF实现的代码
- 使用EIGEN库链接MATLAB和C 代码
- C和MATLAB:为什么MATLAB中的一行成为MATLAB编码器生成的C 代码中的许多行
- 将 Matlab 代码转换为静态C++库