Eclipse January是Java中的一组常见数据结构,包括一个用于处理数字数据的强大库。 随着数据量和复杂性的急剧增加(即所谓的“大数据”),Eclipse January提供了一个数字库,可以简化多维数组形式的数据的处理和操作。
库的核心是IDataset和Dataset接口和类。 因此,出于某些原因,您可能要使用Eclipse January
- 熟悉 。 提供熟悉的功能,尤其是给NumPy用户。
- 健壮 。 具有测试套件,并在Diamond Light Source大量用于生产中。
- 不再传递double [] 。 IDataset为基于API的对象提供了一致的对象,与使用双数组或类似方法相比,其清晰度得到了显着提高。
- 优化 。 针对速度进行了优化,并且一直在不断改进。
- 可扩展 。 允许使用“惰性数据集”处理大于可用内存的数据集。
- 专注于您的算法 。 通过重用该库,您可以专注于代码。
本文概述了多维数组的Dataset类的功能。
数组创建
Eclipse January支持直接创建数组。 假设我们要使用以下数据创建二维数组:
4 5 6
7、8、9]
首先,我们可以创建一个新的数据集:
Dataset dataset = DatasetFactory.createFromObject(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });
这为我们提供了一个具有9个元素的一维数组,如下所示:
然后,我们需要将其重塑为3×3数组:
dataset = dataset.reshape(3, 3);
重塑后的数据集:
[4.0000000、5.0000000、6.0000000],
[7.0000000、8.0000000、9.0000000]
或者我们可以一步完成所有操作:
Dataset another = DatasetFactory.createFromObject(new double[] { 1, 1, 2, 3, 5, 8, 13, 21, 34 }).reshape(3, 3);
另一个数据集:
[3.0000000、5.0000000、8.0000000],
[13.000000、21.000000、34.000000]
有一些获取数据集的形状和维数的方法
System.out.println("shape of dataset: " + Arrays.toString(dataset.getShape())); System.out.println("number of dimensions: " + dataset.getRank());
这给了我们:
尺寸数:2
数据集还提供范围功能和随机函数,所有这些都可以轻松创建数组:
Dataset a = DatasetFactory.createRange(15, Dataset.INT32).reshape(3, 5);
[5、6、7、8、9],
[10、11、12、13、14]
Dataset rand = Random.rand(new int[]{3,4});
[0.47194246、0.12534931、0.41001452、0.90583666],
[0.81731075、0.76468139、0.97097539、0.37182491]
IDataset不仅用于双打,还可以与其他类型一起使用,例如:
- 整数,浮点数
- 复杂
- 复合类型,例如RGB
- 串
- 真的任何课!
阵列运算
org.eclipse.january.dataset.Maths提供了丰富的功能来操作Dataset类。 例如,以下是添加2个数据集数组的方法:
Dataset add = Maths.add(dataset, another);
或者,您也可以作为就地添加。 下面的示例创建一个新的3×3数组,然后向该数组的每个元素添加100。
Dataset inplace = DatasetFactory.createFromObject(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }).reshape(3, 3);
inplace.iadd(100);
[104.0000000,105.0000000,106.0000000],
[107.0000000、108.0000000、109.0000000]
数学库还提供以下功能:
- 基本操作:加,减
- 指数和对数运算
- 统计:最小值,最大值,平均值,中位数,分位数,协方差,峰度等
- 三角函数:sin,cos,tan等
- 和更多!
此外,还有一个对数据集进行操作的LinearAlgebra类。
切片
数据集简化了数据部分的提取,称为“切片”。 例如,给定下面的数组,假设我们要提取数据2、3、5和6。
4 5 6
7、8、9]
此数据位于第一行和第二行以及第二列和第三列。 对于切片,行和列的索引从零开始。 基本切片由开始索引和停止索引组成,其中开始索引为包含索引,而停止索引为排斥索引。 也可以指定可选的增量。 因此,此示例将表示为:
Dataset slice = dataset.getSlice(new Slice(0, 2), new Slice(1, 3));
数据集切片:
[5.0000000,6.0000000]
在处理3维或n维数据时,切片和数组操作功能特别有价值。
尝试Eclipse January
《 入门指南》显示了如何开始使用Eclipse中的示例项目。 本文中的大多数代码都来自BasicExample类。 在尝试了基础知识之后,可以查看并运行一些更高级的示例:
- NumPy示例显示了常见的NumPy构造如何映射到Eclipse数据集。
- 切片示例演示了切片,包括如何从数据集中切出少量数据,而该数据集太大而无法一次全部放入内存中。
- 错误示例演示了将错误应用于数据集。
- 迭代示例演示了几种遍历数据集的方法。
- 惰性示例演示了如何使用未完全加载到内存中的数据集。
Eclipse January是Eclipse Foundation科学工作组的一个孵化项目。 多年来,数据结构是由Diamond Light Source和Oakridge National Labs开发和使用的,这两个机构在处理2D,3D和多维格式的海量复杂数据方面具有丰富的经验。
Eclipse January的强大功能不仅来自能够处理数据的简单性和便利性,而且还提供了数据存储的基本标准。 这样可以轻松集成基于Dataset类的工具。 因此,随着数据大小的不断增长和越来越复杂,Eclipse January提供了一个方便,强大,强大的库来简化和标准化Java中的多维数组。
这篇文章最初发表在2016年 11 月的Eclipse Newsletter:E clipse Loves Science
有关更多信息和文章,请查阅Eclipse Newsletter 。
翻译自: https://jaxenter.com/multi-dimensional-arrays-in-java-with-eclipse-january-130790.html