N-Dimensional Arrays


N-dimensional arrays generalize the idea of the 2-dimensional array. If the first 2 indices correspond to the row and column position, subsequent indices might correspond to the page on which the array appears, the book on which the page is found, and so on…Only operations on N-dimensional arrays are accessing and mutating the (ith, jth, kth,…) index.

os_num_array class provides the capability to represent and manipulate multi-dimensional arrays. The class os_num_array_index class provides an easy indexing mechanism into multi-dimensional arrays represented using the os_num_array class.

The example code below shows how to use various methods supported by the os_num_array class.

Example <ospace/math/examples/numarray.cpp>
#include <ospace/math.h>


int
main()
  {
  os_math_toolkit math_init;

  const long TEST_SIZE = 3;
  const double TEST_A = 2;

  os_num_array< double > array_x( TEST_SIZE, TEST_SIZE, TEST_SIZE, 0.0 );
  os_num_array< double > array_y( TEST_SIZE, TEST_SIZE, TEST_SIZE, 0.0 );
  os_num_array< double > array_z( TEST_SIZE, TEST_SIZE, TEST_SIZE, 0.0 );

  int value = 1;
  for ( int i = 0; i < TEST_SIZE; i++ )
    {
    for ( int j = 0; j < TEST_SIZE; j++ )
      {
      for ( int k = 0; k < TEST_SIZE; k++ )
        {
        array_x( i, j, k ) = value;
        array_y( i, j, k ) = value;
        value++;
        }
      }
    }

  cout << "===== array contents =====" << endl;
  cout << "array x" << endl << array_z << endl;
  cout << "array y" << endl << array_z << endl;
  cout << "array z" << endl << array_z << endl;


  cout << "===== basic scalar ops =====" << endl;

  array_z = array_x + TEST_A;
  cout << "z=x+a = " << endl << array_z << endl;

  array_z = array_x - TEST_A;
  cout << "z=x-a = " << endl << array_z << endl;

  array_z = array_x * TEST_A;
  cout << "z=x*a = " << endl << array_z << endl;

  array_z = array_x / TEST_A;
  cout << "z=x/a = " << endl << array_z << endl;


  cout << "===== basic array ops =====" << endl;

  array_z = array_x + array_y;
  cout << "z=x+y = " << endl << array_z << endl;

  array_z = array_x - array_y;
  cout << "z=x-y = " << endl << array_z << endl;

  array_z = array_x * array_y;
  cout << "z=x*y = " << endl << array_z << endl;

  array_z = array_x / array_y;
  cout << "z=x/y = " << endl << array_z << endl;


  cout << "===== array ops =====" << endl;

  array_z = array_x * array_y + array_x / array_y - array_x * array_y;
  cout << "z=x*y+x/y-x*y = " << endl << array_z << endl;


  return 0;
  }

Copyright©1994-2013 Recursion Software LLC
All Rights Reserved - For use by licensed users only.