Python 数组,获取每 n 个条目,然后移动到下 n 个条目,直到数组末尾
Python array, getting every n entries, then moving onto the next n entries until the end of the array
我有一个包含 4,050,000 个条目的一维 numpy 数组,我将调用 image_t。我试图以检索前 10,000 个条目的方式对其进行切片,因此 image_t[0:10000],然后下一步将是 image_t[10000:20000] 等等,直到它到达最后一片。
这最终会给我 405 个不同的数组,每个数组有 10,000 个条目。我的问题是我尝试了很多不同类型的循环,但我不确定出了什么问题。
我试过:
将其定义为函数
def d_slice(S,step1):
return [S[i::step] for i in range(step)]
这不起作用,因为它 returns 10,000 个数组,每个数组有 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 个数组,每个数组包含 10,000 个条目,但这些条目与完整数组中的条目不匹配(即 im_array[0] 与 image_t[0:10000] 等等)。
我很确定我快要破解它了,但我可以帮助解决我遗漏的问题。
您可以使用 np.array_split()。以下代码应该有效:
split_array = np.array_split(img_t, 405)
现在 split_array 变量是一个包含 405 个数组的列表,每个数组的形状为 (10000,)
试试这个:
import numpy as np
arr = np.arange(4050000)
arr = np.split(405) # split the array up into sections
编辑:
Seermer 在下面的回答也可以。不过,根据 numpy 文档,有一个关键的区别。
The only difference between these functions is that array_split allows indices_or_sections to be an integer that does not equally divide the axis. For an array of length l that should be split into n sections, it returns l % n sub-arrays of size l//n + 1 and the rest of size l//n.
见array_split vs split
为了您的工作,我建议您使用 split
而不是 array_split
。
我有一个包含 4,050,000 个条目的一维 numpy 数组,我将调用 image_t。我试图以检索前 10,000 个条目的方式对其进行切片,因此 image_t[0:10000],然后下一步将是 image_t[10000:20000] 等等,直到它到达最后一片。
这最终会给我 405 个不同的数组,每个数组有 10,000 个条目。我的问题是我尝试了很多不同类型的循环,但我不确定出了什么问题。
我试过:
将其定义为函数
def d_slice(S,step1):
return [S[i::step] for i in range(step)]
这不起作用,因为它 returns 10,000 个数组,每个数组有 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 个数组,每个数组包含 10,000 个条目,但这些条目与完整数组中的条目不匹配(即 im_array[0] 与 image_t[0:10000] 等等)。
我很确定我快要破解它了,但我可以帮助解决我遗漏的问题。
您可以使用 np.array_split()。以下代码应该有效:
split_array = np.array_split(img_t, 405)
现在 split_array 变量是一个包含 405 个数组的列表,每个数组的形状为 (10000,)
试试这个:
import numpy as np
arr = np.arange(4050000)
arr = np.split(405) # split the array up into sections
编辑: Seermer 在下面的回答也可以。不过,根据 numpy 文档,有一个关键的区别。
The only difference between these functions is that array_split allows indices_or_sections to be an integer that does not equally divide the axis. For an array of length l that should be split into n sections, it returns l % n sub-arrays of size l//n + 1 and the rest of size l//n.
见array_split vs split
为了您的工作,我建议您使用 split
而不是 array_split
。