12

so say I do this

x = np.arange(0, 3)

which gives

array([0, 1, 2])

but what can I do like

x = np.arange(0, 3)*repeat(N=3)times

to get

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

3 Answers 3

16

I've seen several recent questions about resize. It isn't used often, but here's one case where it does just what you want:

In [66]: np.resize(np.arange(3),3*3)
Out[66]: array([0, 1, 2, 0, 1, 2, 0, 1, 2])

There are many other ways of doing this.

In [67]: np.tile(np.arange(3),3)
Out[67]: array([0, 1, 2, 0, 1, 2, 0, 1, 2])
In [68]: (np.arange(3)+np.zeros((3,1),int)).ravel()
Out[68]: array([0, 1, 2, 0, 1, 2, 0, 1, 2])

np.repeat doesn't repeat in the way we want

In [70]: np.repeat(np.arange(3),3)
Out[70]: array([0, 0, 0, 1, 1, 1, 2, 2, 2])

but even that can be reworked (this is a bit advanced):

In [73]: np.repeat(np.arange(3),3).reshape(3,3,order='F').ravel()
Out[73]: array([0, 1, 2, 0, 1, 2, 0, 1, 2])
Sign up to request clarification or add additional context in comments.

3 Comments

great answer but I accepted the other answer as you are way to good at programming in python and the other guy needs some answers accepted to catch up on your exceptional stats! But thanks for the helpful answer :-)
I think that resize is the exact answer to the original question
@RunnerBean thanks for the score, but probs should've given it to hpaulj. That way other people get to know the best answer too!
5

EDIT: Refer to hpaulj's answer. It is frankly better.

The simplest way is to convert back into a list and use:

list(np.arange(0,3))*3

Which gives:

>> [0, 1, 2, 0, 1, 2, 0, 1, 2]

Or if you want it as a numpy array:

np.array(list(np.arange(0,3))*3)

Which gives:

>> array([0, 1, 2, 0, 1, 2, 0, 1, 2])

2 Comments

I thought this way was easier than using a for loop.
how do I repeat a different number of times? for example a = np.arange(4) => 0,1,2,3 np.magic_function(a, [4,3,2]) => 0,1,2,3,0,1,2,0,1
5

how about this one?

arr = np.arange(3)
res = np.hstack((arr, ) * 3)

Output

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

Not much overhead I would say.

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.