Разделить двумерный массив по горизонтали на основе процентов - PullRequest
3 голосов
/ 04 июля 2019

Я хочу иметь возможность разбить 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).Пожалуйста, если кто-то может помочь изменить этот код.Спасибо

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Вы можете сделать это, используя Индексирование (или используйте train_test_split ):

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

split_horizontally_idx = int(M.shape[0]* 0.8) # integer for line selection (horizontal selection)

array1 = M[:split_horizontally_idx , :] # indexing/selection of the 80%
array2 = M[split_horizontally_idx: , :] # indexing/selection of the remaining 20% 
0 голосов
/ 09 июля 2019

Вы можете сделать это, нарезав список по своему желанию.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...