JAVA调用matlab运行非常太慢_如何使用MATLAB编写的程序在Octave中运行得更快?

原始的MATLAB代码只需大约10分钟即可运行 . 程序的缓慢部分是关于声明的for循环,用从文档读取的信息填充矩阵,并用这些矩阵进行计算 .

根据经验,如果你在Octave程序中看到一个包含许多迭代的for循环,那将不是一个好的程序 . Matlab曾经是相同的,但现在他们有一个不错的JIT加速了这些草率的代码 . 如果您的代码是矢量化的,那么您不应该看到Octave和Matlab之间存在很大差异 .

怎么做,取决于你的问题 . 许多函数实际上可以正常使用数组,只是人们不会那样使用它们 . 进入你的for循环,然后将每一行放在循环之外,一个接一个 . 根据您的问题,这可能并不容易 . 另一种方法是,如果循环迭代彼此独立,则考虑使用并行包 .

作为一个例子,我曾经有一个程序,在Matlab运行约20分钟 . 在Octave,我在2天后杀了它 . 主要问题是两个for循环,其中一个迭代遍历512 * 512 * 2000图像的每个像素 . 矢量化后,Octave在2分钟内运行它 . 我不得不移植许多Matlab程序,这很常见 .

编辑(回答评论):有很多关于矢量化的例子和教程,但没有银弹 . 解决方案通常是唯一的,它将取决于您的代码 . 对于连续元素之间差异的特定情况,您应该使用 diff 来获取差异数组,然后对其进行处理 . 向量化代码看起来会增加内存使用量,但会更快 .

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值