Как случайным образом перемешать население, сохранив все свойства, кроме одного? - PullRequest
0 голосов
/ 15 марта 2020

Сферическая область пространства заполнена определенным c распределением сфер меньшего размера. Каждая сфера связана с некоторыми физическими свойствами: положение, радиус, масса, скорость и ID, представленные в виде 1d или 3d numpy массивов. Я хотел бы перетасовать эту совокупность сфер полностью случайным образом таким образом, чтобы любая отдельная сфера сохраняла все свои свойства, кроме массива трехмерных координат. Я сталкивался с подобным вопросом здесь ( Случайно перемешать столбцы, кроме первого столбца ), но есть ли простой и быстрый способ pythoni c сделать это без использования DataFrame?

Спасибо за ваша помощь.

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Если вы используете pandas, вы можете просто перетасовать один столбец:

df['col'] = df['col'].sample(frac=1).values

Это одинаково хорошо работает на любом подмножестве столбцов, например,

cols = ['col1', 'col2']
df[cols] = df[cols].sample(frac=1).values

Два столбца перетасованы вместе, то есть их соответствующие значения остаются выровненными.

См. Также этот ответ .

1 голос
/ 15 марта 2020

Вы можете реализовать перемешивание по Кнуту (https://en.wikipedia.org/wiki/Random_permutation), это довольно просто.

Вы можете адаптировать алгоритм реализации, чтобы поменять только нужные свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...