如何在 python 中将 numpy 数组拆分为单独的数组。拆分数由用户给出,拆分基于索引

How to split the numpy array into separate arrays in python. The number is splits is given by the user and the splitting is based on index

我想将我的 numpy 数组拆分成单独的数组。分离必须基于索引。拆分次数由用户给定。

例如, 输入数组:my_array=[1,2,3,4,5,6,7,8,9,10]

如果用户给出拆分计数=2, 然后,拆分必须像

my_array1=[1,3,5,7,9]
my_array2=[2,4,6,8,10]

如果用户给split count=3,那么 输出数组必须是

my_array1=[1,4,7,10]
my_array2=[2,5,8]
my_array3=[3,6,9]

任何人都可以解释一下,我使用偶数概念对拆分计数 2 进行了处理

for i in range(len(outputarray)):
    if i%2==0:
        even_array.append(outputarray[i])  
    else:
        odd_array.append(outputarray[i])

我不知道如何根据索引对变量计数(如 3、4、5)进行拆分。

这是完成任务的python-only方法

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

输入:

my_array=[1,2,3,4,5,6,7,8,9,10]
print(split_array(my_array, n=3))

输出:

[[1, 4, 7, 10], [2, 5, 8], [3, 6, 9]]

您可以为此使用矢量索引(又名 fancy indexing):

>>> 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])]

说明

arange(i, len(a), n) 生成一个以 i 开头的整数数组,跨度不超过 len(a),步长 n。例如,对于 i = 0 它生成一个数组

 >>> np.arange(0, 10, 3)
 array([0, 3, 6, 9])

现在,当您用另一个数组索引一个数组时,您会在请求的索引处获得元素:

 >>> a[[0, 3, 6, 9]]
 array([ 1,  4,  7, 10])

对 i=1..2 重复这些步骤,得到所需的数组列表。