stdlib

stdlib

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

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

stdlibJavaScript数值计算标准库开源Github开源项目
<!-- Apache 2.0许可证 版权所有 (c) 2018 The Stdlib Authors。 根据Apache许可证2.0版("许可证")获得许可; 除非遵守许可证,否则您不得使用此文件。 您可以在以下位置获取许可证副本: http://www.apache.org/licenses/LICENSE-2.0 除非适用法律要求或书面同意,否则根据许可证分发的软件 是基于"按原样"分发的,不附带任何明示或暗示的担保或条件。 有关许可证下的特定语言管理权限和限制,请参阅许可证。 --> <!-- 禁用第一级标题 lint --> <!-- 包含公告的部分。如果包含该部分,请在该部分*后*添加一条水平线。确保在`section`元素后保留一个空行,在`/section`关闭前保留另一个空行。 --> <section class="announcement"> </section> <!-- /.announcement --> <!-- 包含资产(如项目徽标等)的部分。确保在`section`元素后保留一个空行,在`/section`关闭前保留另一个空行。 --> <section class="banner"> <div class="image" align="center"> <br> <br> <a href="https://stdlib.io/" /> <img src="https://yellow-cdn.veclightyear.com/835a84d5/610f14e4-80b7-4789-9470-559386f25381.svg" alt="stdlib logo"> </a> <br> <br> <br> <br> </div> </section> <!-- /.banner -->
<!-- 包含介绍文本的部分。确保在介绍`section`元素后保留一个空行,在`/section`关闭前保留另一个空行。 --> <section class="intro">

我们相信未来网络将成为数值计算的首选环境。为了实现这一未来,我们构建了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]

外部资源

特性

  • 150多个特殊数学函数

    <div class="image" align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/00f24f4b-e7ce-447f-b590-024fed973dba.png" alt="展示特殊数学函数的演示"> </div>
  • 35多个概率分布,支持评估概率密度函数(PDF)、累积分布函数(CDF)、分位数、矩等。

    <div class="image" align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/b7571355-15f9-4ae0-91b0-75d586e76f6b.png" alt="展示概率分布的演示"> </div>
  • 40多个可设定种子的伪随机数生成器(PRNG)。

    <div class="image" align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/5f376f5d-bbc2-41e5-af5b-231b5031e15a.png" alt="展示PRNG的演示"> </div>
  • 200多个用于数据转换、函数式编程和异步控制流的通用实用工具

    <div class="image" align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/4e429d93-0b3e-4821-9a7e-7b99f8c74af5.png" alt="展示通用实用工具的演示"> </div>
  • 200多个用于数据验证和特性检测的断言实用工具

    <div class="image" align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/dcf60beb-1464-4e12-848d-6932b8c9fe17.png" alt="展示断言实用工具的演示"> </div>
  • 50多个用于测试和开发的样本数据集

    <div class="image" align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/ab995c25-88fd-4381-8700-d2b548de348e.png" alt="展示样本数据集的演示"> </div>
  • 用于数据可视化和探索性数据分析的绘图API

    <div class="image" align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/a135e096-4c8f-4e4e-b12c-c154e95af703.png" alt="展示绘图API的演示"> </div>
  • 用于与BLAS库接口的本地插件,具有纯JavaScript回退功能。

    <div class="image" align="center"> <img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@efede6af3ef957da08838903b0558441263adf85/docs/assets/readme/base_blas.png" alt="展示BLAS API的演示"> </div>
  • 支持TAP的基准测试框架

    <div class="image" align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/72608f5e-85c6-4b71-a987-c40d86a65104.gif" alt="展示基准测试框架的演示"> </div>
  • 具有集成帮助和示例的REPL环境。

    <div class="image" align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/d36ebf7d-14ea-4e57-b69a-fcd8de40e2e2.gif" alt="展示REPL环境的演示"> </div>
  • 可以使用BrowserifyWebpack和其他打包工具进行打包,以在Web浏览器中使用。

    <div class="image" align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/9a76c9ca-5b48-45b9-8d86-ef2ec0471abd.png" alt="展示浏览器支持的演示"> </div>
  • 每个函数都附带TypeScript声明文件,确保类型安全并在IDE中提供智能代码补全。

    <div class="image" align="center"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/c3d8e1d4-bfb3-4704-a6ca-27a301eaadbd.png" alt="展示TypeScript声明文件的演示" > </div>

安装

为了适应各种使用场景,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]将项目安装为系统库

<a name="install_complete_library"></a>

完整库

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

$ 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>

<a name="install_individual_packages"></a>

单个包

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>

<a name="install_namespaces"></a>

命名空间

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)。考虑安装单个包或相关的顶级命名空间。

<a name="install_command_line_utility"></a>

命令行实用程序

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

$ npm install -g @stdlib/stdlib

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

$ stdlib help

运行 REPL:

$ stdlib repl

<a name="install_env_builds"></a>

环境构建

<a name="install_env_builds_esm"></a>

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>

<a name="install_env_builds_deno"></a>

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>

<a name="install_env_builds_jquery"></a>

类 jQuery 捆绑包

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

<a name="install_env_builds_umd"></a>

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>

<a name="install_env_builds_nodejs"></a>

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 ] ) ); }

<a name="install_custom_bundles"></a>

自定义捆绑包

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

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

  2. 进入本地安装目录。

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

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

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

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

<a name="install_system_library"></a>

系统库

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


先决条件

在 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

<section class="sponsors">

赞助商

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

<div class="image" align="center"> <br> <a href="https://labs.quansight.org/"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/e8453055-66a3-4f8e-ab27-3446ccf0e302.png" alt="Quansight Labs"> </a> <br> <br> </div>

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

</section>
<section class="users">

用户

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

<div class="image" align="center"> <br> <a href="https://www.cmu.edu/"> <img src="https://cdn.jsdelivr.net/gh/stdlib-js/stdlib@1c8c7dbc9d081eeb13e16c62764f27a65c6553f8/docs/assets/misc/cmu_logo.png" alt="Carnegie Mellon University"> </a> <br> <br> </div>

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

</section>

治理

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

许可证

请参阅 LICENSE。

版权

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

</section>
<section class="badges">

状态

版本

git tag NPM version Node.js version

社区

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

</section> <section class="links"> </section> <!-- /.links -->

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多