Like in a topic, I want to generate an random array of shape (2x2x2) where each row can contains only one non zero value like
x = [[[1 0]
[0 3]]
[7 0]
[0 0]]]
not
x = [[[1 6]
[0 3]]
[7 4]
[2 3]]]
I tried with typical way:
np.random.seed(42)
x = np.random.randint(0, 10, (2, 2, 2))
CodePudding user response:
I would suggest doing the following to achieve your result. You want an array filled with all zeros, except for one element in each row.
- So create an array with all zeros.
- For each row pick a random index.
- Set the value at the random index to a random value.
Here's a snippet that does it for you:
import random
import numpy as np
# init array with 0's
x = np.zeros((2, 2, 2))
# loop over all rows
for i in range(len(x)):
for j in range(len(x[i])):
# pick a row index that will not be 0
rand_row_index = random.randint(0, 1)
# set that index to a random value
x[i][j][rand_row_index] = random.randint(0, 10)