创建N个Numpy块

问题描述 投票:-1回答:1

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

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

有人可以帮忙吗?

谢谢苏里亚

python-3.x numpy machine-learning data-science
1个回答
0
投票

如果行数除以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]
© www.soinside.com 2019 - 2024. All rights reserved.