Skip navigation links

Package de.caff.generics.mda

Multi-dimensional array access.

See: Description

Package de.caff.generics.mda Description

Multi-dimensional array access.

This package provides basic implementations for multi-dimensional arrays. Internally these arrays are handled as arrays (for primitive types) or as ArrayLists,

Normally you'll either use MultiDimensionalArray for standard Java objects or one of the dedicated implementations for primitive Java types:

The main advantages compared to using multiple standard arrays like int[][][] are The main disadvantages If you only have 3 (or 2 or 1) dimensions you can avoid both disadvantages by using one of the dedicated classes for 1-, 2- or 3-dimensional access:
Dedicated fast multi-dimensional arrays.
1-dimensional2-dimensional3-dimensionalUsage
OneDimensionalArray TwoDimensionalArray ThreeDimensionalArray for general types
OneDimensionalBooleanArray TwoDimensionalBooleanArray ThreeDimensionalBooleanArray for boolean
OneDimensionalCharArray TwoDimensionalCharArray ThreeDimensionalCharArray for char
OneDimensionalDoubleArray TwoDimensionalDoubleArray ThreeDimensionalDoubleArray for double
OneDimensionalFloatArray TwoDimensionalFloatArray ThreeDimensionalFloatArray for float
OneDimensionalIntArray TwoDimensionalIntArray ThreeDimensionalIntArray for int
OneDimensionalLongArray TwoDimensionalLongArray ThreeDimensionalLongArray for long
OneDimensionalShortArray TwoDimensionalShortArray ThreeDimensionalShortArray for short
They provide access times comparable to raw arrays when using their getValueAt()/–setValueAt() methods, but also fulfill the general MultiDimensionalAccess contracts. E.g. the 2-dimensional classes allow access of rows or columns as 1-dimensional arrays without the need of copying data.

Examples:


    import static de.caff.generics.tensor.MultiIndexLinearizer.OPEN;
    // [...]
    MultiDimensionalIntArray arr = new MultiDimensionalIntArray(4, 3, 2); // 3D
    arr.setFrom(0,       // 0, 0, 0
                1,       // 0. 0, 1
                2,       // 0, 1, 0
                3,       // 0, 1, 1
                4,       // 0, 2, 9
                5,       // 0, 2, 1
                6,       // 1, 0, 0
                7,       // 1, 0, 1
                8,       // 1, 1, 0
                9,       // 1, 1, 1
                10,      // 1, 2, 0
                11,      // 1, 2, 1
                12,      // 2, 0, 0
                13,      // 2, 0, 1
                14,      // 2, 1, 0
                15,      // 2, 1, 1
                16,      // 2, 2, 0
                17,      // 2, 2, 1
                18,      // 3, 0, 0
                19,      // 3, 0, 1
                20,      // 3. 1, 0
                21,      // 3, 1, 1
                22,      // 3, 2, 0
                23);     // 3, 2, 1
    int v = arr.get(2, 2, 1);  // v = 17
    MultiDimensionalIntArray sub1 = arr.sub(1); // sub1 is 2D (3x2) with the values 6,7, 8,9, 10,11
    MultiDimensionalIntArray sub2 = arr.sub(OPEN, 2); // sub2 is 2D (4x2) with 4,5, 10,11, 16,17, 22,23
    MultiDimensionalIntArray sub3 = arr.sub(OPEN, OPEN, 0); // sub3 is 2D (4x3) with all even values
    MultiDimensionalIntArray sub4 = arr.sub(3, 1); // sub4 is 1D (2) with 20, 21
    MultiDimensionalIntArray sub5 = arr.sub(3).sub(1); // sub5 is 1D (2) with 20. 21
    boolean test = sub4.equals(sub5);  // test is true
    MultiDimensionalIntArray sub6 = sub5.getCopy(); // sub6 is 1D (2) with 20, 21
    sub5.set(42, 1);  // In arrays arr, sub4, and sub5 the 21 changes to 42 because they are only views.
                      // In array sub6 the 21 stays untouched.
 
Skip navigation links