python数组,获取每n个条目,然后移动到下n个条目,直到数组结束

holgip5t  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(367)

我有一个1d numpy数组,有4050000个条目,我将调用image\t。我正在尝试以这样一种方式对它进行切片,即检索前10000个条目,因此image\u t[0:10000],然后下一步将是image\u t[10000:20000]等等,直到它到达最后一个切片。
这会给我405个不同的数组,每个数组有10000个条目。我的问题是,我已经尝试了许多不同类型的循环,我不知道是哪里出了问题。
我试过:
将其定义为函数

def d_slice(S,step1):
    return [S[i::step] for i in range(step)]

这不起作用,因为它返回10000个数组,每个数组包含405个条目,这意味着它统计每个405个条目。
我试着在环路内开始-停止:

def s_t_slice(S):
    for i in np.arange(0,4050000, 10000):
        start = i
        end = i + 10000
        print(i)
        return S[start:end]

在这里,我希望如果我告诉数组从i到i+10000进行切片,它会像我在第一段中解释的那样。不幸的是,程序在i=0之后就死了。不知道为什么。
接下来,我尝试创建一个405长的空数组列表并跳过该函数。

im_array = [[] for i in range(1,406)]

for i in range(0,405):
    for j in range(0,4050000,10000):
    print(j)
    k = j + 10000
    im_array[k] = image_t[j:k]

这是因为我设法得到了405个数组,每个数组有10000个条目,但是条目与完整数组中的条目不匹配(即im\u array[0]与image\u t[0:10000]不一样,以此类推)。
我很确定我快要破解它了,但我可以用一只手来说明我错过了什么。

gpfsuwkq

gpfsuwkq1#

可以使用np.array\u split()。以下代码应起作用:

split_array = np.array_split(img_t, 405)

现在split\ array变量是405个数组的列表,每个数组的形状为(10000,)

e0uiprwp

e0uiprwp2#

试试这个:

import numpy as np

arr = np.arange(4050000)
arr = np.split(405) # split the array up into sections

编辑:瑟默下面的答案也会起作用。不过,根据numpy文档,有一个关键的区别。
这些函数之间的唯一区别是数组的\u split允许索引\u或\u部分为不等分轴的整数。对于长度为l且应拆分为n个部分的数组,它返回大小为l//n+1的l%n子数组和大小为l//n的其余子数组。
请参见数组分割与分割
为了你所做的,我建议你 split 而不是 array_split .

相关问题