【发布时间】:2018-01-19 11:00:33
【问题描述】:
我正在使用 MATLAB 运行模拟器。 不过,这需要几天时间。 因此,我决定将代码更改为 C。 (首先,我尝试在 MATLAB 中使用 c-mex,但我认为编码和调试非常困难。mxType !!!?!?!?因此,我决定使用 Visual Studio 2017 制作 C 代码。)
在我的 MATLAB 代码中,我使用了
x = [unifrnd(varmin(1),varmax(1),varnum,1),...
unifrnd(varmin(2),varmax(2),varnum,1),...
unifrnd(varmin(3),varmax(3),varnum,1)];
即x是大小为varnum*3的矩阵,其第一列是从varmin(1)到varmax(1)均匀分布的随机数,第二列是从varmin(2)到varmax()均匀分布的随机数2),第 3 列是从 varmin(3) 到 varmax(3) 均匀分布的随机数。
当我在 C 代码中制作矩阵时,我将编写如下代码:
srand(time(NULL));
for(j=1; j<3; j++) {
for(i=1; i<varnum; i++) {
x[i][j] = rand() % (varmax[j]-varmin[j]) + varmin[j];
}
}
我正在将我的代码从 MATLAB 更改为 C,因为运行时间很长。但是,我认为 MATLAB 一次处理一个矩阵,但 C 通过运行 M*N 迭代来处理大小为 MxN 的矩阵。 尽管如此,下面的代码 (C) 是否比上面的代码 (MATLAB) 快? 另外,有没有更好的代码来制作具有随机数的矩阵?
【问题讨论】:
-
我建议将数据存储在
Disc。 -
mex 非常简单,只需将所有内容转换为 C 类型并返回即可。你最多需要 4 个 mex 函数
-
@rahnema1 不幸的是,我根本不懂 C++。我真的很想学 C++,但我现在做不到,对不起。
-
@AnderBiguri 好的,我将尝试使用 C-mex!
标签: c matlab performance random