创建N个Numpy块

时间:2019-12-14 10:56:18

标签: python-3.x numpy machine-learning data-science

我有一个巨大的numpy数组,其数据是两个要素和10000行(即X,y具有10000行) 我需要将其拆分为覆盖所有10000行的k个不同的numpy数组。 用户将输入k的值为正整数。 说k = 10 我现在需要的是10个数据分割,每个数据块具有大约或等于1000行。 我需要将每个块命名为arr1,arr2 .... arr10。

我尝试了什么: 我使用了np.vsplit,但没有得到像arr1,arr2这样的命名块

有人可以帮忙吗?

谢谢 苏里亚

1 个答案:

答案 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]