githubEdit

快速入门

ND4J的主要功能和简要示例。

介绍

ND4J是JVM的科学计算库。它是用来在生产环境中使用的,而不是作为一个研究工具,这意味着常规的设计是为了以最低的RAM需求快速运行。主要特点是:

  • 一个多功能的n维数组对象。

  • 线性代数和信号处理函数。

  • 多平台功能,包括GPU。

    • 所有主要操作系统: win/linux/osx/android.

    • 架构: x86, arm, ppc.

此快速入门遵循与Numpy快速入门arrow-up-right相同的布局和方法。这将帮助熟悉Python和Numpy的人快速开始使用Nd4J。

先决条件

您可以从任何JVM语言arrow-up-right中使用Nd4J。(例如:Scala、Kotlin)。可以将Nd4J与任何构建工具一起使用。此快速入门中的示例代码使用以下内容:

为了提高可读性,我们向您展示System.out.println(...)的输出。但是我们还没有在示例代码中显示print语句。如果您有信心知道如何使用maven和git,请随时跳到基础部分。在本节的其余部分中,我们将构建一个小型的“hello ND4J”应用程序,以验证先决条件设置是否正确。

执行以下命令从github获取项目。

当一切设置正确时,您应该看到以下输出:

基础

Nd4j的主要特点是具有多功能的n维阵列接口INDArray。为了提高性能,Nd4j使用堆外内存来存储数据。INDArray不同于标准Java数组。

INDArray x的一些关键属性和方法如下:

数组创建

要创建INDArray,可以使用Nd4jarrow-up-right类的静态工厂方法。

Nd4j.createFromArray函数被重载,以便于从常规Java数组创建INDArrays。下面的示例使用Javadouble数组。类似的create方法对于float、int和long重载。对于所有类型,Nd4j.createFromArray函数都有高达4d的重载。

Nd4j可以使用函数zerosones创建用0和1初始化的数组。rand函数允许您创建用随机值初始化的数组。创建的INDArray的默认数据类型是float。有些重载允许您设置数据类型。

使用arange函数创建一个均匀空间值数组:

linspace函数允许您指定生成的点数:

打印数组

INDArray支持Java的toString()方法。当前的实现具有有限的精度和有限的元素数。输出类似于打印NumPy数组:

基本操作

必须使用INDArray方法对数组执行操作。有就地(in-place)和复制重载、标量和元素级重载版本。就地(in-place)运算符返回对数组的引用,因此可以方便地将操作链接在一起。尽可能使用就地(in-place)运算符来提高性能。复制运算符有新的数组创建开销。

加法: arr.add(...), arr.addi(...) 减法: arr.sub(...), arr.subi(...) 乘法: arr.mul(...), arr.muli(...) 除法 : arr.div(...), arr.divi(...)

执行基本操作时,必须确保基础数据类型相同。

INDArray有实现缩减/累加操作的方法,如 sum, min, max.

提供维度参数以在指定维度上应用操作:

转换操作

Nd4j提供熟悉的数学函数,如sin、cos和exp,这些称为转换操作。结果作为INDArray返回。

您可以在Javadocarrow-up-right中查看转换操作的完整列表

矩陈乘法

我们已经在基本操作中看到了元素的乘法运算。其他矩阵运算有自己的方法:

索引、切片和迭代

索引、切片和迭代在Java中比Python更困难。 要从INDArray检索单个值,可以使用getDoublegetFloatgetInt方法。INDArrays不能像Java数组那样被索引。可以使用toDoubleVector()toDoubleMatrix()toFloatVector()toFloatMatrix()从INDArray获取Java数组。

对于多维数组,应该使用INDArray.get(NDArrayIndex...)。下面的示例演示如何遍历二维数组的行和列。注意,对于2D数组,我们可以使用getColumngetRow便利方法。

形状操作

改变数组的形状

沿着每个轴的元素的数量是形状。形状可以用各种方法改变。

将不同的数组堆叠在一起

可以使用vstackhstack方法将数组堆叠在一起。

副本和视图

使用INDArrays时,并不总是复制数据。这里有三种情况你应该注意。

完全没有复制

简单的指派不会复制数据。Java通过引用传递对象。在方法调用上不生成任何副本。

视图或浅复制

一些函数将返回数组的视图。

深考贝

要复制数组,请使用dup方法。这将为您提供一个包含新数据的新数组。

功能和方法概述

数组创建

arangearrow-up-right, createarrow-up-right, copyarrow-up-right, emptyarrow-up-right, empty_likearrow-up-right, eyearrow-up-right, linspacearrow-up-right, meshgridarrow-up-right, onesarrow-up-right, ones_likearrow-up-right, randarrow-up-right, readTxtarrow-up-right, zerosarrow-up-right, zeros_likearrow-up-right

转换

convertToDoublesarrow-up-right, convertToFloatsarrow-up-right, convertToHalfsarrow-up-right

操作

concatenatearrow-up-right, hstackarrow-up-right, ravelarrow-up-right, repeatarrow-up-right, reshapearrow-up-right, squeezearrow-up-right, swapaxesarrow-up-right, teararrow-up-right, transposearrow-up-right, vstackarrow-up-right

排序

argmaxarrow-up-right, maxarrow-up-right, minarrow-up-right, sortarrow-up-right

操作

choicearrow-up-right, cumsumarrow-up-right, mmularrow-up-right, prodarrow-up-right, putarrow-up-right, putWherearrow-up-right, sumarrow-up-right

基本统计

covarianceMatrixarrow-up-right, meanarrow-up-right, stdarrow-up-right, vararrow-up-right

基本线性代数

crossarrow-up-right, dotarrow-up-right, gesvdarrow-up-right, mmularrow-up-right

Last updated

Was this helpful?