Create matrix 100×100 each row with next ordinal number

Question:

I try to create a matrix 100×100 which should have in each row next ordinal number like below:
enter image description here

I created a vector from 1 to 100 and then using for loop I copied this vector 100 times. I received an array with correct data so I tried to sort arrays using np.argsort, but it didn’t worked as I want (I don’t know even why there are zeros in after sorting).

Is there any option to get this matrix using another functions? I tried many approaches, but the final layout was not what I expected.

max_x = 101
    
z = np.arange(1,101)
print(z)

x = []

for i in range(1,max_x):
    x.append(z.copy())

print(x)

y = np.argsort(x)
y
Asked By: focus87krk

||

Answers:

argsort returns the indices to sort by, that’s why you get zeros. You don’t need that, what you want is to transpose the array.

Make x a numpy array and use T

y = np.array(x).T

Output

[[  1   1   1 ...   1   1   1]
 [  2   2   2 ...   2   2   2]
 [  3   3   3 ...   3   3   3]
 ...
 [ 98  98  98 ...  98  98  98]
 [ 99  99  99 ...  99  99  99]
 [100 100 100 ... 100 100 100]]

You also don’t need to loop to copy the array, use np.tile instead

z = np.arange(1, 101)
x = np.tile(z, (100, 1))
y = x.T

# or one liner

y = np.tile(np.arange(1, 101), (100, 1)).T
Answered By: Guy
import numpy as np

np.asarray([ (k+1)*np.ones(100) for k in range(100) ])

Or simply

np.tile(np.arange(1,101),(100,1)).T
Answered By: Girardi
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.