【发布时间】:2012-09-03 21:47:51
【问题描述】:
我正在尝试将一些用 MATLAB 编写的代码移植到 C 中,以便我可以编译该函数并更快地执行它(代码执行非常频繁,它会带来显着的速度提升)。
所以基本上我的 MATLAB 代码所做的是它接受一个矩阵并将其转换为一个字符串,添加括号和逗号,这样我就可以将它写入一个文本文件。这是一个关于这将如何用于向量 MyVec 的想法:
MyVec = rand(1,5);
NbVal = length(MyVec)
VarValueAsText = blanks(2 + NbVal*30 + (NbVal-1));
VarValueAsText([1 end]) = '[]';
VarValueAsText(1 + 31*(1:NbVal-1)) = ',';
for i = 1:NbVal
VarValueAsText(1+(i-1)*31+(1:30)) = sprintf('%30.15f', MyVec(i));
end
现在,我怎样才能在 C 语言中获得类似的结果?这似乎并不难,因为我可以提前计算我的字符串(char 数组)的大小,并且我知道我需要写入内存区域的每个元素的位置。 sprintf 函数也存在于 C 中。但是,我无法理解如何设置它,还因为我没有一个可以通过反复试验轻松学习的环境(对于每次尝试我都必须重新编译,这通常会导致分段错误和 MATLAB 崩溃...)。
我希望有人能提供帮助,尽管问题可能看起来微不足道,但我对 C 语言的经验很少,而且我无法找到合适的例子来开始......
【问题讨论】:
-
也许如果您向我们展示一些示例输入(例如:4*4 矩阵),事情会更容易。 (您想使用磁盘文件作为中间存储,还是需要内存接口?)注意:在 C 语言中,sprintf() 将字符串/缓冲区作为第一个参数作为结果应该去的地方,我不要指望matlab在这方面有很大不同。注意 2:结果字符串中似乎没有分隔符(空格、制表符、逗号、换行符)。
-
您好,感谢您的回复!不过,我不确定我是否理解您的评论:我输入的代码是 MATLAB 中的当前(工作)代码,我正在尝试将其移植到 C 中。实际上,我已经添加了第一行(带有随机输入) 作为样本输入。最后,我在 VarValuesAsString 中得到了我的“格式化值”...
-
我对数学实验室一无所知。看起来好像您希望结果字符串为
[val1,val2,val3,...]这是正确的吗?
标签: c arrays string matlab printf