У меня есть Numpy массив, который выглядит следующим образом:Разделить NumPy массива с помощью массива ключей
+----+-------+----------------+
| id | class | probability |
+----+-------+----------------+
| 0 | 0 | 0.371301944865 |
| 0 | 1 | 0.317619162391 |
| 0 | -1 | 0.311078922721 |
| 1 | 0 | 0.401434454687 |
| 1 | 1 | 0.316000976419 |
| 1 | -1 | 0.282564557522 |
| 2 | 1 | 0.361490456577 |
| 2 | 0 | 0.324832048066 |
| 2 | -1 | 0.313677512904 |
| . | . | . |
| . | . | . |
| . | . | . |
+----+-------+----------------+
или более формально:
x = numpy.array([[ 0.00000000e+00, 0.00000000e+00, 3.71301945e-01],
[ 0.00000000e+00, 1.00000000e+00, 3.17619162e-01],
[ 0.00000000e+00, -1.00000000e+00, 3.11078923e-01],
[ 1.00000000e+00, 0.00000000e+00, 4.01434455e-01],
[ 1.00000000e+00, 1.00000000e+00, 3.16000976e-01],
[ 1.00000000e+00, -1.00000000e+00, 2.82564558e-01],
[ 2.00000000e+00, 1.00000000e+00, 3.61490457e-01],
[ 2.00000000e+00, 0.00000000e+00, 3.24832048e-01],
[ 2.00000000e+00, -1.00000000e+00, 3.13677513e-01]])
Как вы можете видеть, для каждого идентификатора, у меня есть три класса, каждая с вероятностью. Я хотел бы преобразовать это в массив из четырех столбцов следующим образом:
id/class -1 0 1
0 0.311078922721 0.371301944865 0.317619162391
1 0.282564557522 0.401434454687 0.316000976419
. . . .
. . . .
. . . .
Есть ли быстрый/чистый способ сделать это ?!
Спасибо, но, к сожалению, это не будет работать, как классы не упорядочены одинаковым для каждого идентификатора (посмотрите на пример, я предоставил)! – Angelica
Вы можете легко отсортировать данные с помощью 'x = x [np.argsort (x [:, 1])]', а затем 'x = x [np.argsort (x [:, 0])]'. Затем у вас есть данные, отсортированные по id и классам, и вы можете использовать reshape. Тем не менее, я думаю, что решение Pandas является более чистым и простым, если вы хотите его использовать. – kazemakase
Редактировать: спасибо @kazemakase. Я добавляю строку для сортировки. –