What it is
ND4J (N-Dimensional Arrays for Java) is a scientific computing library for the JVM, providing high-performance n-dimensional arrays, linear algebra operations, and GPU acceleration. It serves as the foundation for Deeplearning4j and other Java-based ML frameworks.
ND4J provides Nd4j class for creating and manipulating n-dimensional arrays (INDArray), supports element-wise operations, linear algebra, broadcasting, reductions, and integration with deep learning frameworks like Deeplearning4j.
Installation
<dependency>
<groupId>org.nd4j</groupId>
<artifactId>nd4j-native-platform</artifactId>
<version>1.0.0-M2.1</version>
</dependency>Getting started
The smallest useful thing you can do with it, and what each part means.
import org.nd4j.linalg.factory.Nd4j;
import org.nd4j.linalg.api.ndarray.INDArray;
INDArray array = Nd4j.create(new double[]{1, 2, 3, 4});
System.out.println(array);INDArray a = Nd4j.create(new double[]{1,2,3});
INDArray b = Nd4j.create(new double[]{4,5,6});
INDArray c = a.add(b);
System.out.println(c);Advanced usage
Where the library earns its place over a simpler alternative.
INDArray mat1 = Nd4j.create(new double[][]{{1,2},{3,4}});
INDArray mat2 = Nd4j.create(new double[][]{{5,6},{7,8}});
INDArray result = mat1.mmul(mat2);
System.out.println(result);INDArray mat = Nd4j.create(new double[][]{{1,2,3},{4,5,6}});
INDArray addVec = Nd4j.create(new double[]{10,20,30});
INDArray result = mat.addRowVector(addVec);
System.out.println(result);INDArray arr = Nd4j.create(new double[]{1,2,3,4,5});
System.out.println(arr.meanNumber());
System.out.println(arr.stdNumber());// Use ND4J with CUDA backend for GPU computations
// Ensure nd4j-cuda-platform dependency is includedErrors and fixes
The failures you are most likely to hit, and what actually resolves them.
- IllegalStateException
- Occurs if ND4J backend is not properly initialized. Check native library dependencies.
- DimensionMismatchException
- Thrown when shapes of arrays do not match for operations. Verify array dimensions.
- OutOfMemoryError
- Reduce array sizes or enable off-heap memory for large datasets.
Best practices
- Use vectorized operations instead of loops for performance.
- Leverage broadcasting for operations on arrays of different shapes.
- Prefer Nd4j native platform or CUDA backend for large datasets or GPU acceleration.
- Release unused NDArrays if memory usage is high.
- Combine ND4J with Deeplearning4j for deep learning workflows.
Background
Why it exists, and what it was reacting to.
ND4J was created to bring NumPy-like capabilities to Java. It allows Java developers to perform vectorized operations, matrix computations, and linear algebra efficiently, both on CPU and GPU. ND4J is commonly used for deep learning, data analysis, and scientific computing within the Java ecosystem.
