Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

C/++/# Library that supports multidimensional Arrays

  1. Jul 17, 2017 #1
    I'm am looking for a C++ library that supports high-dimensional arrays ( 3=< ) and element-wise calculations.
    Is there such a thing?
     
  2. jcsd
  3. Jul 17, 2017 #2
    What exactly are you trying to do? Native C++ supports as many dimensions as you want:

    Code (Text):
    int fourDArray[10][10][10][10];
     
  4. Jul 17, 2017 #3
    I have N x N 1x3 vectors that I need to be able to sum element-wise row-wise. I also need to do element-wise calculations on N x 3 arrays.
     
  5. Jul 17, 2017 #4

    Mark44

    Staff: Mentor

    This could be implemented as a three-dimensional array, something that is straightforward enough that I doubt that there is a library of the type you're looking for. With regard to "sum element-wise row-wise," you need to be a bit more explicit as to what you mean.
    Nearly all C++ textbooks have a section on working with multidimension arrays. I'm sure there are also many online tutorials about the same subject.
     
  6. Jul 17, 2017 #5
    Perhaps I wasn't clear. What I'm looking for is a numpy-like library for C++.
     
  7. Jul 17, 2017 #6

    Mark44

    Staff: Mentor

    No, you were clear. What @newjerseyrunner and I are saying is that no such library is needed. Even if such a library existed, the time it would take to learn how to use that API would be at least as much as the time it takes to learn how to use multidimension arrays in C++.
     
  8. Jul 17, 2017 #7
    And that, like Mark44's post, does not answer my question.
     
  9. Jul 17, 2017 #8

    jim mcnamara

    User Avatar

    Staff: Mentor

    Okay - the answer is the standard C++ (or C) library handles multidimensional arrays. The boost library has some extra add-ons for arrays. Multi-index containers, for example.

    Lapack handles multidimensional tensors (matrices)- Linear algebra. More good add-ons.

    http://www.boost.org/

    http://www.netlib.org/lapack/

    These extend the base standard library. This is as close to an answer for the question as posed. I believe:
    Please tell us what you are trying to do. Please do not ask a question assuming you know how to accomplish the task, in this case some library you think must exist.
     
  10. Jul 17, 2017 #9

    Mark44

    Staff: Mentor

    As an example, here's some code that creates essentially a 4 x 4 matrix of column vectors, with each column vector being
    ##\begin {bmatrix} 1 \\ 2 \\ 3 \end{bmatrix}##

    The following code creates a 3D array, one "slice" of which looks like this:
    ##\begin{bmatrix} 1 & 1 & 1 & 1 \\
    2 & 2 & 2 & 2 \\
    3 & 3 & 3 & 3 \end{bmatrix}##
    The other "slices" look the same
    Code (C):
    int main()
    {
        int vectors[4][3][4];
        int i, j, k;

        for (k = 0; k < 4; k++) // Each column
        {
            for (j = 0; j < 3; j++) // Each row
            {
                for (i = 0; i < 4; i++) // Each slice
                   vectors[i][j][k] = 1 + j;
            }
        }
     return 0;
    }
     
  11. Jul 18, 2017 #10

    Mark44

    Staff: Mentor

    @madsmh, from one of your previous threads, you're coding in python. Python is a much higher-level language, so you might be unfamiliar with how things are done in a lower-level language like C or C++ where there isn't so much happening under the hood.
     
  12. Jul 18, 2017 #11

    rcgldr

    User Avatar
    Homework Helper

    There aren't many languages that fully support multi-dimensional arrays with built in operators. The only language I'm aware of that does this is APL (A Programming Language), where almost all of the built in operators support scalars, vectors, matrices, and arrays with 3 or more dimensions. I assume Matlab comes close to this, but I don't know Matlab. Prior posts already mentioned some libraries for C / C++.
     
  13. Jul 19, 2017 #12
    Thank you all for your suggestions. @Mark44 Is correct that I am used to Python with only a passing familiarity with C++.
    The project I am working on is N-Body simulator for predicting Solar System orbits in Python, and I would like to speed
    up the computations without loosing the graphical abilies of Python. As an example of what I would like to to do in C++ is the Verlet integrator which I have implemented like this:

    Code (Python):

    def verlet(system, trajectory, rows, delta_t):

        delta_t2 = delta_t ** 2

        # TODO Implement Velocity Verlet
        for k in range(rows):
            if k == 0:
                # Get initial positions
                q0 = system.get_positions()

                # Save to trajectory
                trajectory.set_trajectory_position(q0)

            elif k == 1:
                # Get previous position
                q0 = trajectory.get_position_at_index(0)

                # Get initial velocity
                p0 = system.get_velocities()

                # Calculate accerleration
                a = system.get_accelerations()

                # Calculate q1
                q1 = q0 + p0 * delta_t + 0.5 * a * delta_t2

                # Save to trajectory
                trajectory.set_trajectory_position(q1)

                # Update positions of the planets
                system.set_positions(q1)

            # Calculate q_n+1
            else:
                # Calculate accerleration
                a = system.get_accelerations()

                # Get the prevous results
                qn1 = trajectory.get_position_at_index(k-2)
                qn = trajectory.get_position_at_index(k-1)

                # Calculate new new positions
                qplus = 2*qn - qn1 + a * delta_t2

                # Save to trajectory
                trajectory.set_trajectory_position(qplus)

                # Update positions of the planets
                system.set_positions(qplus)
     
    As you can see I am able to do computations with multiple N x 3 arrays in a single line of code with Numpy.
    I was hoping that there would be a similar facillities in C++ via a library.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted



Similar Discussions: Library that supports multidimensional Arrays
Loading...