-
Notifications
You must be signed in to change notification settings - Fork 360
Closed
Labels
Description
I am converting the following python code into rust using ArrayD.
tmp = numpy.zeros_like(h4e)
dim = h4e.shape[0]
for i in range(dim):
for j in range(dim):
for k in range(dim):
for m in range(dim):
tmp[i, j, k, m, :, :, :, :] = (
(h4e[i, j, k, m, :, :, :, :] -
h4e[i, j, m, k, :, :, :, :] +
h4e[i, m, j, k, :, :, :, :] -
h4e[i, m, k, j, :, :, :, :] -
h4e[i, k, j, m, :, :, :, :] +
h4e[i, k, m, j, :, :, :, :]) -
(h4e[j, i, k, m, :, :, :, :] -
h4e[j, i, m, k, :, :, :, :] +
h4e[j, m, i, k, :, :, :, :] -
h4e[j, m, k, i, :, :, :, :] -
h4e[j, k, i, m, :, :, :, :] +
h4e[j, k, m, i, :, :, :, :]) -
(h4e[k, j, i, m, :, :, :, :] -
h4e[k, j, m, i, :, :, :, :] +
h4e[k, m, j, i, :, :, :, :] -
h4e[k, m, i, j, :, :, :, :] -
h4e[k, i, j, m, :, :, :, :] +
h4e[k, i, m, j, :, :, :, :]) -
(h4e[m, j, k, i, :, :, :, :] -
h4e[m, j, i, k, :, :, :, :] +
h4e[m, i, j, k, :, :, :, :] -
h4e[m, i, k, j, :, :, :, :] -
h4e[m, k, j, i, :, :, :, :] +
h4e[m, k, i, j, :, :, :, :])) / 24.0
When I tried the following code, it takes about 50 seconds when the shape is [6; 8].
Is there more performant and correct way?
let mut tmp = ArrayD::<c64>::zeros(IxDyn(&[dim; 8]));
for (i, j, k, m) in iproduct!(0..dim, 0..dim, 0..dim, 0..dim) {
for (p, q, r, s) in iproduct!(0..dim, 0..dim, 0..dim, 0..dim) {
tmp[&[i, j, k, m, p, q, r, s][..]] = (
(h4e[&[i, j, k, m, p, q, r, s][..]] -
h4e[&[i, j, m, k, p, q, r, s][..]] +
h4e[&[i, m, j, k, p, q, r, s][..]] -
h4e[&[i, m, k, j, p, q, r, s][..]] -
h4e[&[i, k, j, m, p, q, r, s][..]] +
h4e[&[i, k, m, j, p, q, r, s][..]]) -
(h4e[&[j, i, k, m, p, q, r, s][..]] -
h4e[&[j, i, m, k, p, q, r, s][..]] +
h4e[&[j, m, i, k, p, q, r, s][..]] -
h4e[&[j, m, k, i, p, q, r, s][..]] -
h4e[&[j, k, i, m, p, q, r, s][..]] +
h4e[&[j, k, m, i, p, q, r, s][..]]) -
(h4e[&[k, j, i, m, p, q, r, s][..]] -
h4e[&[k, j, m, i, p, q, r, s][..]] +
h4e[&[k, m, j, i, p, q, r, s][..]] -
h4e[&[k, m, i, j, p, q, r, s][..]] -
h4e[&[k, i, j, m, p, q, r, s][..]] +
h4e[&[k, i, m, j, p, q, r, s][..]]) -
(h4e[&[m, j, k, i, p, q, r, s][..]] -
h4e[&[m, j, i, k, p, q, r, s][..]] +
h4e[&[m, i, j, k, p, q, r, s][..]] -
h4e[&[m, i, k, j, p, q, r, s][..]] -
h4e[&[m, k, j, i, p, q, r, s][..]] +
h4e[&[m, k, i, j, p, q, r, s][..]])) / 24.0
}
}