- #1
- 30
- 2
I'm am looking for a C++ library that supports high-dimensional arrays ( 3=< ) and element-wise calculations.
Is there such a thing?
Is there such a thing?
int fourDArray[10][10][10][10];
What exactly are you trying to do? Native C++ supports as many dimensions as you want:
Code:int fourDArray[10][10][10][10];
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.I have N x N 1x3 vectors that I need to be able to sum element-wise row-wise.
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.madsmh said:I also need to do element-wise calculations on N x 3 arrays.
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++.Perhaps I wasn't clear. What I'm looking for is a numpy-like library for C++.
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++.
As an example, here's some code that creates essentially a 4 x 4 matrix of column vectors, with each column vector beingOkay - the answer is the standard C++ (or C) library handles multidimensional arrays.
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;
}
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)