我有一个巨大的numpy数组,其数据是两个要素和10000行(即X,y具有10000行)我需要将其拆分为覆盖所有10000行的k个不同的numpy数组。用户将输入k的值为正整数。说k = 10我现在需要的是10个数据分割,每个数据块具有大约或等于1000行。而且我需要将每个块命名为arr1,arr2 .... arr10。
我尝试过的:我使用了np.vsplit,但没有得到像arr1,arr2这样的命名块
有人可以帮忙吗?
谢谢苏里亚
如果行数除以k
而没有余数,则可以使用np.vsplit
。否则,列表理解可以完成这项工作。
import numpy as np
arr = np.arange(0,200) # make some toy data
arr.shape = (2, 100) # get adequate shape
k = 2 # 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, can't use np.vsplit...
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.vsplit(arr, k)
如果要“按名称”调用拆分数组的每个部分,也可以使用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]