V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
timqian
V2EX  ›  问与答

用 javascript 做科学计算的最佳的方案是什么?

  •  
  •   timqian · 2016-02-20 21:15:35 +08:00 · 4697 次点击
    这是一个创建于 2980 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近计划使用 javascript 做一个教学性质的计算量子力学 库(这样就可以在浏览器中运行了)。已经有一些 matlab 代码了( https://github.com/timqian/things-to-build/issues/7 )。但是想要把 matlab 代码用 js 实现时,却发现还没有很成熟的库来做科学计算。

    google 了一下午,找到这些库: https://github.com/timqian/scientific-computation-libs-in-javascript

    mathjs 似乎是其中最活跃,最成熟的库了。但和 matlab , python ( numpy )比起来还是差很多,只有一些基本的函数。

    另一种思路是将 C/C++ 的库编译成 javascript(使用emscripten)。或是更进一步,通过WebAssembly的编译, C/C++ 或者其他语言写的代码都可以在浏览器环境运行了。只是这个项目目前还在开发阶段, MVP 都还没有。

    所以,我的问题是:在浏览器中做科学计算,最佳的方案是什么?目前 和 未来

    16 条回复    2016-02-22 12:52:22 +08:00
    celadevra
        1
    celadevra  
       2016-02-20 21:32:40 +08:00
    看看 Jupyter Notebook 或者 Wolfram 家的解决方案?
    timqian
        2
    timqian  
    OP
       2016-02-20 21:47:38 +08:00
    @celadevra Jupyter Notebook 运行的不是 python 吗? Wolfram 不太清楚,不过应该是他家的计算应该是在服务器上的吧?
    celadevra
        3
    celadevra  
       2016-02-20 22:23:35 +08:00
    @timqian 抱歉,我大概没理解到位你说的在浏览器中运行的意思。我猜你希望学生下载 JS 和 HTML 文件,就可以在自己的浏览器上计算?如果是这样的话,我提不出更好的想法 :)

    如果仅仅是因为语言的问题而认为 Jupyter Notebook 不合适的话,它是有第三方的 kernel 支持 Matlab 、 Scilab 和 octave 的。
    cqcn1991
        4
    cqcn1991  
       2016-02-20 22:28:06 +08:00 via iPhone
    天啊!为什么要用 js 做科学计算?!
    timqian
        5
    timqian  
    OP
       2016-02-20 22:30:07 +08:00
    @celadevra Thanks all the same, 可能问题问的不太清楚,我的意思是第一种,不需要 kernel ,直接在浏览器中运行。
    timqian
        6
    timqian  
    OP
       2016-02-20 22:35:55 +08:00
    @cqcn1991 便于演示和传播。斯坦福还用 js 做了 机器学习的库呢: http://cs.stanford.edu/people/karpathy/convnetjs/。所以这个想法应该不算疯狂
    cqcn1991
        7
    cqcn1991  
       2016-02-20 22:37:54 +08:00
    唉,我也不想写 python 和 matlab
    我觉得 Ruby 写起来最舒服,然后没有类似 numpy 和 matplotlib 等等的东西啊。。。。
    timqian
        8
    timqian  
    OP
       2016-02-20 22:38:00 +08:00
    timqian
        9
    timqian  
    OP
       2016-02-20 22:38:36 +08:00
    Comdex
        10
    Comdex  
       2016-02-21 00:10:30 +08:00
    同求用 golang 做科学计算的最佳方案
    linhua
        11
    linhua  
       2016-02-21 12:07:02 +08:00 via Android
    网络呀,搭建远程科学计算环境,浏览器只是作为一个 web 终端界面。在自己家的电脑上运行 Jupyter Notebook ,用浏览器远程访问。

    如果没有网络,那就上虚拟机,提前在虚拟机系统中配置好环境,然后只需在目标机器上安装虚拟机软件就可用了。可以看看哪个虚拟机软件安装比较快、方便,有没有可能做成便携式软件。不过话说移动网络覆盖那么广,就算机器没联网,也可以把手机的移动网络通过 USB 连线共享给电脑。
    linhua
        12
    linhua  
       2016-02-21 12:47:40 +08:00 via Android
    就算不用虚拟机,做一个 usb 便携式 python 科学计算环境也是可以的,和 virtualenv 差不多,只需要注意平台相关的库,和 CPU 架构相关的可执行文件(如 python.exe)。可借鉴 xxnet ,把所有需要的库都集成进去,做成便携式的,即开即用的。
    tsaoyu
        13
    tsaoyu  
       2016-02-21 17:57:05 +08:00
    YuJianrong
        14
    YuJianrong  
       2016-02-22 11:23:11 +08:00
    WebAssembly 和 Asm.js(emscripten) 是一个东西的不同展现(至少现阶段的计划还是),是一个可行但不推荐的做法。
    个人建议是 mathjs 少什么就增强一下顺便发 pull request 给他们, js 领域最重要的还是这些原生 js 写的库。
    timqian
        15
    timqian  
    OP
       2016-02-22 12:31:44 +08:00
    @YuJianrong 我现在也是这个想法,只是 mathjs 压缩之后都还有 400 多 k ,要是能像 lodash 一样模块化就好了
    timqian
        16
    timqian  
    OP
       2016-02-22 12:52:22 +08:00
    @YuJianrong mathjs v2 可以 create custom builds ,看得不够仔细。参考: http://josdejong.com/blog/2015/08/08/architectural-changes-in-mathjs-v2/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   938 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 87ms · UTC 21:44 · PVG 05:44 · LAX 14:44 · JFK 17:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.