Javascript和科学处理?

Javascript和科学处理?,javascript,data-mining,scientific-computing,Javascript,Data Mining,Scientific Computing,Matlab、R和Python功能强大,但对于我想做的一些数据挖掘工作来说,它们要么代价高昂,要么速度缓慢。我正在考虑在这两个方面都使用Javascript ,良好的可视化库,并且能够将浏览器用作界面 我面临的第一个问题是科学编程中显而易见的一个问题,即如何对数据文件进行I/O?第二种是客户端还是服务器端?最后一个问题,我能做一些真正便携的东西吗?比如说,把所有的东西都放在USB上,然后从USB上运行 我花了几个星期寻找答案。Server2go似乎满足了客户机/服务器的需求,我认为这意味着我可以

Matlab、R和Python功能强大,但对于我想做的一些数据挖掘工作来说,它们要么代价高昂,要么速度缓慢。我正在考虑在这两个方面都使用Javascript ,良好的可视化库,并且能够将浏览器用作界面

我面临的第一个问题是科学编程中显而易见的一个问题,即如何对数据文件进行I/O?第二种是客户端还是服务器端?最后一个问题,我能做一些真正便携的东西吗?比如说,把所有的东西都放在USB上,然后从USB上运行

我花了几个星期寻找答案。Server2go似乎满足了客户机/服务器的需求,我认为这意味着我可以从客户端的程序中获取数据。Server2go还允许从USB运行。我使用的数据文件通常是XML,并且似乎有几个javascript转换器转换成JSON


然而,环顾四周之后,我不确定我的方法是否有意义。因此,在我进一步提交之前,有没有关于Javascript作为科学数据处理的便携工具的建议/想法/指导?

我必须同意Javascript不适合科学处理的评论。然而,你最了解你的需求;也许您已经找到了一些有用的库,可以满足您的需要。请注意,您必须自己实现所有逻辑。没有内置的处理复数、矩阵、积分或。。。通常程序员的时间远比机器的时间宝贵。就个人而言,我会研究编译语言;在我创建了第一个版本之后,无论我最喜欢哪种语言,它的速度都不够快

假设JavaScript是一条可行之路:

数据输入/输出 我可以想出三个选择:

使用ajax向服务器发送和接收数据 似乎是您在Server2go上找到的解决方案。它要求您编写一个服务器后端,但这可以保持相当简单。它真正需要做的就是能够读写文件作为对客户端应用程序的响应

使用包含文件I/O的v8非浏览器实现 比如说。然后,您可以避免使用服务器,只需使用命令行界面,所有代码都将是JavaScript。除此之外,它大致相当于第一个选项

使用请求用户保存或加载的创建文件对象 在我看来,这是最糟糕的选择,因为需要用户交互。这将避免对服务器的需要;您的应用程序可以是一个简单的html文件,用ajax请求加载所有数据文件。您必须使用一个特殊的开关启动Chrome,以允许使用
文件://
协议的ajax请求,如前所述

这些选项只与文件I/O有关,不能在JavaScript中执行文件I/O。这是因为浏览器不能允许任意web代码执行任意文件I/O;其安全影响将是可怕的。每个选项都描述了一种不执行文件I/O的方法

第一个与为客户机执行文件I/O的服务器通信

第二种方法使用“特殊”版本的JavaScript,其条件不同于浏览器,因此安全含义并不重要。但这意味着您必须查看在实际使用的实现中文件I/O是如何完成的,这在JavaScript中并不常见

第三个要求用户控制文件I/O

接口 即使您不使用JavaScript进行实际处理(到目前为止这是共识),也没有什么可以阻止您使用浏览器作为界面或JavaScript库进行可视化。这是JavaScript擅长的

如果您希望以交互方式控制数据挖掘工具,则需要一台能够控制该工具的服务器。Server2go应该可以工作,如果您使用Node.js中的内置服务器,或者。。。如果您不需要交互控制数据工具;也就是说,您首先生成处理后的数据,然后查看服务器可以避免的数据,方法是使用
文件//:
协议和。但是真的;避免使用服务器不应该是一个目标

我不会详细讨论接口问题,因为没有什么特别的内容要说,而且几乎所有关于javascript的内容都是关于接口的


有一件事,一定要使用像或这样的声明性数据绑定库。

JavaScript速度被高估了。这是一个Web2.0神话

让我来解释一下这个说法(不要因为我说了一些你不想听的话而对我投反对票!)

当然,JavaScriptV8是一个高度优化的VM。在幼稚的基准测试中,它确实击败了许多其他脚本语言

然而,它是一种范围非常有限的语言。它是为网络的“ADHS世界”设计的。这是一个最好的努力,但它可能会失败,你几乎不能保证事情按时完成

以MongoDB为例。一开始它看起来又好又快,提供了很多。直到您看到例如MapReduce是单线程的,因此速度非常慢。并非所有的金子都会发光

现在看看数据挖掘相关的库,比如BLAS。基本线性代数、数学运算等。所有CPU制造商,如Intel和AMD,都为其CPU提供优化版本。这是一种优化,需要详细了解各个CPU,远远超出我们当前编译器的能力。这些库包含各种CPU的优化代码路径,所有CPU基本上都在做相同的事情。 对于这些操作,使用优化的库(如BLAS)可以轻松产生5-20倍的加速;同时,通常在O(n^2)或O(n^3)中的矩阵操作将主导整个运行时

因此,一种好的数据挖掘语言可以让您一直使用机器代码

蟒蛇SciPy和R在这里是不错的选择。它们内部有优化的库,易于访问,但同时允许进行包装