Python 基于百分比水平拆分二维numpy数组

Python 基于百分比水平拆分二维numpy数组,python,python-3.x,numpy,Python,Python 3.x,Numpy,我希望能够将2Dnumpy水平拆分为两个拆分(80%和20%)。我尝试过使用np.vsplit(),但它似乎不适合这种情况。例如,假设我有以下大小为(6,3)的矩阵。我想将其水平分为80%和20%[大约(5,3),(1,3)],所以我尝试了以下方法: M = [[1,2,3],[4,5,6],[7,8,9], [10,11,12], [77,54,11], [424,78,98]] M = np.asarray(M) arr1 = np.vsplit(M, int(M.shape[0]* 0.8

我希望能够将2D
numpy
水平拆分为两个拆分(80%和20%)。我尝试过使用
np.vsplit()
,但它似乎不适合这种情况。例如,假设我有以下大小为(6,3)的矩阵。我想将其水平分为80%和20%[大约(5,3),(1,3)],所以我尝试了以下方法:

M = [[1,2,3],[4,5,6],[7,8,9], [10,11,12], [77,54,11], [424,78,98]]
M = np.asarray(M)
arr1 = np.vsplit(M, int(M.shape[0]* 0.8))[0]  # 80% of data goes to arr1
arr2 = np.vsplit(M, int(M.shape[0]* 0.2))[1]  # 20% of data goes to arr2

我知道这种尝试是不正确的,但我无法修复它(实际上仍在学习python)。如果有人可以帮助修改此代码,请谅解。谢谢

您可以使用索引(或使用):


你可以根据自己的意愿对列表进行切片

M = [[1,2,3],[4,5,6],[7,8,9], [10,11,12], [77,54,11], [424,78,98]]

M = np.asarray(M)

a80=M[:(round(0.8*len(M[:,2]))),:]
a20=M[:(round(0.2*len(M[:,2]))),:]
print(a80,"\n\n",a20)

关于这次分裂,你的最终目标是什么?如果您是为了机器学习而这样做的,sklearn已经有了
train\u test\u split
,它已经做到了这一点。如果你只是确定地拆分2D矩阵,那么为什么不直接使用索引呢?@Dan感谢你指出这一点。这是我的错。我修改了当前解决方案中未使用的POSIT。我已经提到这一点。
M = [[1,2,3],[4,5,6],[7,8,9], [10,11,12], [77,54,11], [424,78,98]]

M = np.asarray(M)

a80=M[:(round(0.8*len(M[:,2]))),:]
a20=M[:(round(0.2*len(M[:,2]))),:]
print(a80,"\n\n",a20)