最近计划使用 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 都还没有。
所以,我的问题是:在浏览器中做科学计算,最佳的方案是什么?目前 和 未来
1
celadevra 2016-02-20 21:32:40 +08:00
看看 Jupyter Notebook 或者 Wolfram 家的解决方案?
|
2
timqian OP @celadevra Jupyter Notebook 运行的不是 python 吗? Wolfram 不太清楚,不过应该是他家的计算应该是在服务器上的吧?
|
3
celadevra 2016-02-20 22:23:35 +08:00
@timqian 抱歉,我大概没理解到位你说的在浏览器中运行的意思。我猜你希望学生下载 JS 和 HTML 文件,就可以在自己的浏览器上计算?如果是这样的话,我提不出更好的想法 :)
如果仅仅是因为语言的问题而认为 Jupyter Notebook 不合适的话,它是有第三方的 kernel 支持 Matlab 、 Scilab 和 octave 的。 |
4
cqcn1991 2016-02-20 22:28:06 +08:00 via iPhone
天啊!为什么要用 js 做科学计算?!
|
5
timqian OP @celadevra Thanks all the same, 可能问题问的不太清楚,我的意思是第一种,不需要 kernel ,直接在浏览器中运行。
|
6
timqian OP @cqcn1991 便于演示和传播。斯坦福还用 js 做了 机器学习的库呢: http://cs.stanford.edu/people/karpathy/convnetjs/。所以这个想法应该不算疯狂
|
7
cqcn1991 2016-02-20 22:37:54 +08:00
唉,我也不想写 python 和 matlab
我觉得 Ruby 写起来最舒服,然后没有类似 numpy 和 matplotlib 等等的东西啊。。。。 |
8
timqian OP |
9
timqian OP |
10
Comdex 2016-02-21 00:10:30 +08:00
同求用 golang 做科学计算的最佳方案
|
11
linhua 2016-02-21 12:07:02 +08:00 via Android
网络呀,搭建远程科学计算环境,浏览器只是作为一个 web 终端界面。在自己家的电脑上运行 Jupyter Notebook ,用浏览器远程访问。
如果没有网络,那就上虚拟机,提前在虚拟机系统中配置好环境,然后只需在目标机器上安装虚拟机软件就可用了。可以看看哪个虚拟机软件安装比较快、方便,有没有可能做成便携式软件。不过话说移动网络覆盖那么广,就算机器没联网,也可以把手机的移动网络通过 USB 连线共享给电脑。 |
12
linhua 2016-02-21 12:47:40 +08:00 via Android
就算不用虚拟机,做一个 usb 便携式 python 科学计算环境也是可以的,和 virtualenv 差不多,只需要注意平台相关的库,和 CPU 架构相关的可执行文件(如 python.exe)。可借鉴 xxnet ,把所有需要的库都集成进去,做成便携式的,即开即用的。
|
13
tsaoyu 2016-02-21 17:57:05 +08:00
[binder]( http://mybinder.org) + Jupyter with example at https://github.com/IanHawke/maths-with-python
|
14
YuJianrong 2016-02-22 11:23:11 +08:00
WebAssembly 和 Asm.js(emscripten) 是一个东西的不同展现(至少现阶段的计划还是),是一个可行但不推荐的做法。
个人建议是 mathjs 少什么就增强一下顺便发 pull request 给他们, js 领域最重要的还是这些原生 js 写的库。 |
15
timqian OP @YuJianrong 我现在也是这个想法,只是 mathjs 压缩之后都还有 400 多 k ,要是能像 lodash 一样模块化就好了
|
16
timqian OP @YuJianrong mathjs v2 可以 create custom builds ,看得不够仔细。参考: http://josdejong.com/blog/2015/08/08/architectural-changes-in-mathjs-v2/
|