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

2016-02-20 21:15:35 +08:00
 timqian

最近计划使用 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 都还没有。

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

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

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

如果没有网络,那就上虚拟机,提前在虚拟机系统中配置好环境,然后只需在目标机器上安装虚拟机软件就可用了。可以看看哪个虚拟机软件安装比较快、方便,有没有可能做成便携式软件。不过话说移动网络覆盖那么广,就算机器没联网,也可以把手机的移动网络通过 USB 连线共享给电脑。
linhua
2016-02-21 12:47:40 +08:00
就算不用虚拟机,做一个 usb 便携式 python 科学计算环境也是可以的,和 virtualenv 差不多,只需要注意平台相关的库,和 CPU 架构相关的可执行文件(如 python.exe)。可借鉴 xxnet ,把所有需要的库都集成进去,做成便携式的,即开即用的。
tsaoyu
2016-02-21 17:57:05 +08:00
YuJianrong
2016-02-22 11:23:11 +08:00
WebAssembly 和 Asm.js(emscripten) 是一个东西的不同展现(至少现阶段的计划还是),是一个可行但不推荐的做法。
个人建议是 mathjs 少什么就增强一下顺便发 pull request 给他们, js 领域最重要的还是这些原生 js 写的库。
timqian
2016-02-22 12:31:44 +08:00
@YuJianrong 我现在也是这个想法,只是 mathjs 压缩之后都还有 400 多 k ,要是能像 lodash 一样模块化就好了
timqian
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/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/257909

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX