我有一个巨大的numpy数组,其数据是两个要素和10000行(即X,y具有10000行) 我需要将其拆分为覆盖所有10000行的k个不同的numpy数组。 用户将输入k的值为正整数。 说k = 10 我现在需要的是10个数据分割,每个数据块具有大约或等于1000行。 我需要将每个块命名为arr1,arr2 .... arr10。
我尝试了什么: 我使用了np.vsplit,但没有得到像arr1,arr2这样的命名块
有人可以帮忙吗?
谢谢 苏里亚
答案 0 :(得分:0)
如果行数除以k
而没有余数,则可以使用np.split
。否则,列表理解可以完成这项工作:
import numpy as np
arr = np.arange(0, 200) # make some toy data
arr.shape = (2, 100) # get adequate shape
k = 5 # define how many times to split
# get the "blocksize" and remainder along axis 1
sz, sz_rem = divmod(arr.shape[1], k)
# split...
if sz_rem: # remainder is not 0 ->
out = [arr[:, i*sz:(i+1)*sz] for i in range(k)]
out += [arr[:, sz*k:sz*k+sz_rem]] # add the remaining part
else:
out = np.split(arr, k, axis=1)
如果要“按名称”调用拆分数组中的每个部分,也可以使用dict
:
out = {f'arr{i}': arr[:, i*sz:(i+1)*sz] for i in range(k)}
if sz_rem:
out[f'arr{k}'] = arr[:, sz*k:sz*k+sz_rem]