0

I have the following code which creates a 4D grid matrix and I am looking to insert the rolled 2D vals matrix into this grid.

import numpy as np

k = 100
x = 20
y = 10
z = 3

grid = np.zeros((y, k, x, z))
insert_map = np.random.randint(low=0, high=y, size=(5, k, x))
vals = np.random.random((5, k))

for i in range(x):
    grid[insert_map[:, :, i], i, 0] = np.roll(vals, i)

If vals would be a 1D array and I would use a 1D insert_map array as a reference it would work, however using it in multiple dimensions seems to be an issue and it raises error:

ValueError: shape mismatch: value array of shape (5,100)  could not be broadcast to indexing result of shape (5,100,3)

I'm confused as to why it's saying that error as grid[insert_map[:, :, i], i, 0] should in my mind give a (5, 100) insert location for the y and k portion of the grid array and then fixes the x and z portion with i and 0?

Is there any way to insert the 2D (5, 100) rolled vals matrix into the 4D (10, 100, 20, 3) grid matrix by 2D indexing?

1 Answer 1

1

grid is (y, k, x, z)

insert_map is (5, k, x). insert_map[:, :, i] is then (5,k).

grid[insert_map[:, :, i], i, 0] will then be (5,k,z). insert_map[] only indexes the first y dimension.

vals is (5,k); roll doesn't change that.

np.roll(vals, i)[...,None] can broadcast to fill the z dimension, if that's what you want.

Your insert_map can't select values along the k dimension. It's values, created by the randint are valid the y dimension.

If the i and 0 are supposed to apply to the last two dimensions, you still need an index for the k dimension. Possibilities are:

grid[insert_map[:, j, i], j, i, 0]
grid[insert_map[:, :, i], 0, i, 0]
grid[insert_map[:, :, i], :, i, 0]
grid[insert_map[:, :, i], np.arange(k), i, 0]
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.