I want to split my numpy array into separate arrays. The separation must be based on the index. The split count is given by the user.
For example,
The input array: my_array=[1,2,3,4,5,6,7,8,9,10]
If user gives split count =2, then, the split must be like
my_array1=[1,3,5,7,9]
my_array2=[2,4,6,8,10]
if user gives split count=3, then the output array must be
my_array1=[1,4,7,10]
my_array2=[2,5,8]
my_array3=[3,6,9]
could anyone please explain, I did for split count 2 using even odd concept
for i in range(len(outputarray)):
if i%2==0:
even_array.append(outputarray[i])
else:
odd_array.append(outputarray[i])
I don't know how to do the split for variable counts like 3,4,5 based on the index.
CodePudding user response:
You can use indexing by vector (aka fancy indexing) for it:
>>> a=np.array([1,2,3,4,5,6,7,8,9,10])
>>> n = 3
>>> [a[np.arange(i, len(a), n)] for i in range(n)]
[array([ 1, 4, 7, 10]), array([2, 5, 8]), array([3, 6, 9])]
CodePudding user response:
Here is a python-only way of doing your task
def split_array(array, n=3):
arrays = [[] for _ in range(n)]
for x in range(n):
for i in range(n):
arrays[i] = [array[x] for x in range(len(array)) if x%n==i]
return arrays
Input:
my_array=[1,2,3,4,5,6,7,8,9,10]
print(split_array(my_array, n=2))
Output:
[[1, 3, 5, 7, 9], [2, 4, 6, 8, 10]]
Input:
my_array=[1,2,3,4,5,6,7,8,9,10]
print(split_array(my_array, n=3))
Output:
[[1, 4, 7, 10], [2, 5, 8], [3, 6, 9]]