V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
timqian
10.02D
V2EX  ›  问与答

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

  •  
  •   timqian · Feb 20, 2016 · 5327 views
    This topic created in 3721 days ago, the information mentioned may be changed or developed.

    最近计划使用 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 replies    2016-02-22 12:52:22 +08:00
    celadevra
        1
    celadevra  
       Feb 20, 2016
    看看 Jupyter Notebook 或者 Wolfram 家的解决方案?
    timqian
        2
    timqian  
    OP
       Feb 20, 2016
    @celadevra Jupyter Notebook 运行的不是 python 吗? Wolfram 不太清楚,不过应该是他家的计算应该是在服务器上的吧?
    celadevra
        3
    celadevra  
       Feb 20, 2016
    @timqian 抱歉,我大概没理解到位你说的在浏览器中运行的意思。我猜你希望学生下载 JS 和 HTML 文件,就可以在自己的浏览器上计算?如果是这样的话,我提不出更好的想法 :)

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

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