Home > other >  repeating specific rows in array n times
repeating specific rows in array n times

Time:06-28

I have a huge numpy array with 15413 rows and 70 columns. The first column represents the weight (so if the first element in a row is n, that row should be repeated n times.

I tried with numpy.repeat but I don’t think it’s giving me the correct answer because np.sum(chain[:,0]) is not equal to len(ACT_chain)

ACT_chain = []
for i in range(len(chain[:,0])):
    chain_row = chain[i]
    ACT_chain.append(chain_row)
    if int(chain[:,0][i]) > 1:
        chain_row = np.repeat(chain[i], chain[:, 0][i], axis=0) 
        ACT_chain.append(chain_row)

For example, running this code with this sample array

chain = np.array([[1, 5, 3], [2, 2, 1], [3, 0, 1]]) 

gives

[array([1, 5, 3]), array([2, 2, 1]), array([[2, 2, 1],
   [2, 2, 1]]), array([3, 0, 1]), array([[3, 0, 1],
   [3, 0, 1],
   [3, 0, 1]])] 

but the output I expect is

array([[1, 5, 3], [2, 2, 1], [2, 2, 1], [3, 0, 1], [3, 0, 1], [3, 0, 1]])

CodePudding user response:

You can use repeat here, without the iteration.

np.repeat(chain, chain[:, 0], axis=0)

array([[1, 5, 3],
       [2, 2, 1],
       [2, 2, 1],
       [3, 0, 1],
       [3, 0, 1],
       [3, 0, 1]])
  • Related