Как разделить двумерный массив по группирующей переменной и вернуть список массивов, пожалуйста (также важен порядок).
Чтобы показать ожидаемый результат, эквивалент в R можно сделать как
> (A = matrix(c("a", "b", "a", "c", "b", "d"), nr=3, byrow=TRUE)) # input
[,1] [,2]
[1,] "a" "b"
[2,] "a" "c"
[3,] "b" "d"
> (split.data.frame(A, A[,1])) # output
$a
[,1] [,2]
[1,] "a" "b"
[2,] "a" "c"
$b
[,1] [,2]
[1,] "b" "d"
РЕДАКТИРОВАТЬ: Чтобы уточнить: я хотел бы разбить массив / матрицу, A
на список из нескольких массивов на основе уникальных значений в первом столбце.То есть, разделить A
на один массив, где первый столбец имеет a
, и другой массив, где первый столбец имеет b
.
Я пробовал Python-эквивалент R "функция "split" , но это дает три массива
import numpy as np
import itertools
A = np.array([["a", "b"], ["a", "c"], ["b", "d"]])
b = a[:,0]
def split(x, f):
return list(itertools.compress(x, f)), list(itertools.compress(x, (not i for i in f)))
split(A, b)
([array(['a', 'b'], dtype='<U1'),
array(['a', 'c'], dtype='<U1'),
array(['b', 'd'], dtype='<U1')],
[])
, а также numpy.split
, используя np.split(A, b)
, но для которых нужны целые числа.Хотя я, возможно, смогу использовать Как преобразовать строки в целые числа в Python? , чтобы преобразовать буквы в целые числа, но даже если я передаю целые числа, он не разбивается, как ожидалось
c = np.transpose(np.array([1,1,2]))
np.split(A, c) # returns 4 arrays
Можно ли это сделать?спасибо
РЕДАКТИРОВАТЬ: обратите внимание, что это небольшой пример, и число групп может быть больше двух, и они могут не быть заказаны.