Project Icon

stdlib

JavaScript数值计算和科学计算标准库

stdlib是一个专注于数值计算和科学计算的JavaScript标准库。它提供了丰富的数学、统计、数据处理和流处理功能,包括150多个特殊数学函数、35种概率分布和40多个可重复的伪随机数生成器。stdlib采用可分解架构,支持自由组合API和功能。该项目提供全面的文档、测试和性能基准,确保代码质量。stdlib支持浏览器和Node.js环境,并提供TypeScript类型定义。


我们相信未来网络将成为数值计算的首选环境。为了实现这一未来,我们构建了stdlib。

stdlib([/ˈstændərd lɪb/][ipa-english] "standard lib")是一个标准库,专注于数值和科学计算,使用JavaScript(和C)编写,可在浏览器和Node.js中执行。该库提供了一系列强大、高性能的数学、统计、数据处理、流处理等库,并包含了您期望从标准库中获得的许多实用工具。

stdlib的与众不同之处在于其完全可分解的架构,让您可以根据自己的偏好和用例交换和混搭API和功能。

使用stdlib时,您可以确信您正在使用最全面、严谨、精心编写、经过研究、记录、测试、测量和高质量的代码。

想加入我们,将数值计算带到网络中吗?首先给项目加星吧。 :star2:

在这个GitHub仓库中探索stdlib的源代码和文档。有关开发stdlib的指导,请参阅[开发指南][stdlib-development]。

感谢您成为我们社区的一员!您的支持对我们来说无比珍贵!

资源

  • 安装
  • [主页][stdlib-homepage]
  • [文档][stdlib-documentation]
  • [源代码][stdlib-source]
  • [代码覆盖率][stdlib-code-coverage]
  • [常见问题][stdlib-faq]

外部资源

特性


安装

为了适应各种使用场景,stdlib可以通过多种方式使用。首选的使用方法取决于您的具体用例。我们提供了一些用户故事来帮助您确定最佳方法。😃

虽然本项目的安装说明默认使用npm进行包管理,但通过其他包管理器(如yarn)进行安装应该只需将npm命令替换为相关包管理器的命令即可。

用户故事

  • 我想在JavaScript和Node.js中执行数据分析数据科学任务,类似于我可能使用Python、Julia、R和MATLAB的方式。

  • 我正在构建一个Web应用程序

    • 我计划使用BrowserifyWebpack和其他打包工具在Web浏览器中使用。

      • 安装单独的包。安装整个项目可能是不必要的,并会导致安装时间变长。
    • 我想打包一个包含各种stdlib功能的自定义bundle。

    • 我想通过简单使用script标签来包含stdlib功能。

  • 我想使用 ES 模块。

    • 使用单个包的 ES 模块构建
  • 我想使用预构建的捆绑包(可能通过 CDN,如 unpkgjsDelivr)。

  • 我对使用顶级 stdlib 命名空间中的大量功能感兴趣,不想单独安装数百个独立包(例如,构建在线计算器应用程序并想要 stdlib 的所有数学功能)。

    • 安装一个或多个顶级命名空间。安装整个项目可能是不必要的,会导致安装时间更长。安装顶级命名空间可能意味着安装永远不会使用的功能;但是,安装顶级命名空间可能比单独安装许多独立包更容易、耗时更少。

      在打包时,安装顶级命名空间不应成为问题,因为仍然可以独立地要求/导入单个功能。但是,项目安装时间可能会稍微慢一些。

  • 我正在构建一个 Node.js 服务器应用程序

    • 我对使用 stdlib 中的各种功能感兴趣。

      • 安装单个包。安装整个项目可能是不必要的,会导致安装时间更长。
    • 我想打包stdlib 功能并避免依赖树。

    • 我对使用顶级 stdlib 命名空间中的大量功能感兴趣,不想单独安装数百个独立包。

      • 安装一个或多个顶级命名空间。安装整个项目可能是不必要的,会导致安装时间更长。安装顶级命名空间可能意味着安装永远不会使用的功能;但是,安装顶级命名空间可能比单独安装许多独立包更容易、耗时更少。
  • 我正在使用 Deno

    • 使用预构建的 Deno 构建来导入单个包
  • 我想在 Observable 笔记本中使用 stdlib 功能。

  • 我想修改 stdlib,可能甚至创建自定义构建以链接到特定平台的本机库(如英特尔的 MKL 或其他数值库)。

    • 通过克隆此存储库并按照[开发指南][stdlib-development]中描述的[安装说明][stdlib-development]将项目安装为系统库

完整库

要将整个项目安装为库或应用程序依赖项,

$ npm install @stdlib/stdlib

安装后,可以单独require/import stdlib 包以最小化加载时间并减小捆绑包大小。例如,使用 require:

var ndarray = require( '@stdlib/ndarray/array' );

var arr = ndarray( [ [ 1, 2 ], [ 3, 4 ] ] );
// 返回 <ndarray>

使用 import:

import ndarray from '@stdlib/ndarray/array';

var arr = ndarray( [ [ 1, 2 ], [ 3, 4 ] ] );
// 返回 <ndarray>

单个包

stdlib 的设计允许将主项目分解为可以独立使用的单个包。因此,项目用户可以避免安装所有项目功能,只安装他们需要的确切功能。

要安装单个包,请将 @stdlib/ 后的正斜杠 / 替换为连字符 -。例如,

$ npm install @stdlib/ndarray-array

安装后,可以require/import 单个包。例如,使用 require:

var ndarray = require( '@stdlib/ndarray-array' );

var arr = ndarray( [ [ 1, 2 ], [ 3, 4 ] ] );
// 返回 <ndarray>

使用 import:

import ndarray from '@stdlib/ndarray-array';

var arr = ndarray( [ [ 1, 2 ], [ 3, 4 ] ] );
// 返回 <ndarray>

命名空间

stdlib 由各种顶级命名空间组成(即,由共同主题统一的相关功能集合)。例如,要安装顶级 math 命名空间中的所有数学功能,

$ npm install @stdlib/math

安装后,可以单独require/import 顶级命名空间内的包以最小化加载时间并减小捆绑包大小。例如,使用 require:

var sin = require( '@stdlib/math/base/special/sin' );

var v = sin( 3.14 );
// 返回 <number>

使用 import:

import sin from '@stdlib/math/base/special/sin';

var v = sin( 3.14 );
// 返回 <number>

注意:不支持安装顶级命名空间内的嵌套命名空间(例如, math/base)。考虑安装单个包或相关的顶级命名空间。

命令行实用程序

要全局安装以用作命令行实用程序和/或使用 REPL,

$ npm install -g @stdlib/stdlib

这将暴露 stdlib 命令。例如,查看可用的子命令:

$ stdlib help

运行 REPL:

$ stdlib repl

环境构建

ES 模块

要通过 <script> 标签使用 ES 模块,请使用每个包存储库中通过专用 esm 分支提供的 ES 模块构建(例如,请参阅 @stdlib/math-base-special-erfesm 分支)。例如,

<script type="module">
import linspace from 'https://cdn.jsdelivr.net/gh/stdlib-js/array-base-linspace@esm/index.mjs';
import erf from 'https://cdn.jsdelivr.net/gh/stdlib-js/math-base-special-erf@esm/index.mjs';

const x = linspace( -10.0, 10.0, 100 );

for ( let i = 0; i < x.length; i++ ) {
    console.log( 'x: %d, erf(x): %d', x[ i ], erf( x[ i ] ) );
}
</script>

Deno

要在 Deno 中使用单个包,请使用每个包存储库中通过专用 deno 分支提供的 Deno 构建(例如,请参阅 @stdlib/ndarray-arraydeno 分支)。例如,

import ndarray from 'https://cdn.jsdelivr.net/gh/stdlib-js/ndarray-array@deno/mod.js';

var arr = ndarray( [ [ 1, 2 ], [ 3, 4 ] ] );
// 返回 <ndarray>

类 jQuery 捆绑包

对于那些想要类 jQuery 捆绑包的人,可以使用每个包存储库中通过专用 umd 分支提供的预构建可分发 UMD 捆绑包,用于浏览器环境或作为服务器环境中的共享("打包")库。有关更多详细信息,请参阅 UMDNode.js 部分。

UMD

要通过 <script> 标签或在 Observable 中使用 UMD 捆绑包,请使用每个包存储库中通过专用 umd 分支提供的 UMD 浏览器构建(例如,请参阅 @stdlib/math-base-special-erfumd 分支)。例如,

<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/stdlib-js/array-base-linspace@umd/browser.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/gh/stdlib-js/math-base-special-erf@umd/browser.js"></script>
<script type="text/javascript">
(function () {

var x = linspace( -10.0, 10.0, 100 );

for ( var i = 0; i < x.length; i++ ) {
    console.log( 'x: %d, erf(x): %d', x[ i ], erf( x[ i ] ) );
}

})();
</script>

Node.js

打包 stdlib 功能并避免安装依赖树,请使用每个包存储库中通过专用 umd 分支提供的 UMD 服务器构建(例如,请参阅 @stdlib/math-base-special-erfumd 分支)。例如,

var linspace = require( '/path/to/vendor/umd/@stdlib/array-base-linspace' );
var erf = require( '/path/to/vendor/umd/@stdlib/math-base-special-erf' );

var x = linspace( -10.0, 10.0, 100 );

for ( var i = 0; i < x.length; i++ ) {
    console.log( 'x: %d, erf(x): %d', x[ i ], erf( x[ i ] ) );
}

自定义捆绑包

根据项目需求创建自定义捆绑包,请按以下步骤操作:

  1. 按照开发指南中描述的下载、配置和安装说明进行操作。

  2. 进入本地安装目录。

  3. 运行以下命令以打印帮助文档,了解如何提供要捆绑的 stdlib 包名列表

    $ NODE_PATH=./lib/node_modules node ./bin/cli bundle-pkg-list -- -h
    
  4. 修改并运行上述命令,列出要捆绑的包

    $ NODE_PATH=./lib/node_modules node ./bin/cli bundle-pkg-list -- <pkg> <pkg> <pkg> ...
    

生成捆绑包后,可以通过 <script> 标签加载捆绑包,方法与上文描述的预构建 UMD 分发捆绑包相同。

系统库

要将其安装为系统库(例如,为了创建自定义构建),请按照开发指南中描述的下载、配置和安装说明进行操作。


先决条件

在 Node.js 中安装和运行 stdlib 需要以下先决条件:

  • Node.js:JavaScript 运行时(版本 >= 0.10
  • npm:包管理器(版本 > 2.7.0;如果 Node < 1.0.0,版本 > 2.7.0< 4.0.0;如果 Node <= 10.x.x,版本 > 2.7.0< 6.0.0

stdlib 中的大多数功能都是用 JavaScript 实现的,无需其他先决条件即可使用 stdlib(即您可以安全地避免安装任何其他先决条件);但是,一些实现尝试通过使用原生绑定和/或 WebAssembly 来获得性能优势。虽然需要运行 stdlib,因为每个 stdlib 实现都有 JavaScript 回退,但以下依赖项需要用于构建原生附加组件,包括链接到 BLAS 和 LAPACK 库:

  • GNU make:开发工具和任务运行器
  • GNU bash:兼容 sh 的 shell
  • gcc 和 g++ 或 Clang:C/C++ 编译和链接(g++ 版本 >= 4.8;clang 版本 >= 3.5,OS X 上的 Xcode 版本 >=8.3.1
  • gfortran:Fortran 编译和链接(版本 >= 4.8

虽然需要运行 stdlib,但以下依赖项需要用于自动下载外部库:

  • curl、wget 或 fetch(FreeBSD):用于下载远程资源的实用程序

以下外部库可以使用 make 自动从源代码下载和编译:

  • OpenBLAS:优化的 BLAS 库
  • Electron:跨平台桌面应用程序框架

贡献

首次贡献者?

  • 请参阅贡献指南。

已经是专家了?

  • Fork 存储库。

  • 克隆 fork 的存储库

    $ git clone --depth=1 https://github.com/<username>/stdlib.git
    

    其中 <username> 是您的 GitHub 用户名。

  • 进入 stdlib 目录

    $ cd stdlib
    
  • 安装依赖项

    $ make install-node-modules
    
  • 初始化您的 stdlib 开发环境

    $ make init
    

赞助商

stdlib 的开发得到了以下赞助商的慷慨支持:

您有兴趣支持 stdlib 吗?如果是,请加入我们的 Open Collective!


用户

以下组织和主要利益相关者信任并依赖 stdlib:

您的组织使用 stdlib 吗?如果是,我们很乐意听到您的反馈!


治理

有关 stdlib 项目治理的信息,请参阅 GOVERNANCE.md。

许可证

请参阅 LICENSE。

版权

版权所有 © 2016-2024。Stdlib 作者。


状态

版本

git tag NPM version Node.js version

社区

[![Chat][chat-image]][chat-url]

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号