#python #numpy #vector
#python #numpy #вектор
Вопрос:
Я хочу рандомизировать три отдельных вектора в python в том же порядке. Я имею в виду это таким образом:
before randomizing:
a = [[1, ...], b = [[1, ...], c = [1,
[2, ...], [2, ...], 2,
[3, ...]] [3, ...]] 3]
after randomizing:
a = [[2, ...], b = [[2, ...], c = [2,
[3, ...], [3, ...], 3,
[1, ...]] [1, ...]] 1]
Это только пример того, как выглядят данные. На самом деле это большой набор данных.
Я знаю, что я мог бы объединить их и выполнить рандомизацию, но есть ли какой-либо другой способ сделать это, не объединяя их, потому что мне нужно, чтобы они в конце были разделены.
Ответ №1:
Вы можете рандомизировать их индексы.
import numpy as np
# before randomizing:
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
b = np.array([1,2,3])
# randomize indexes
n = np.size(a,axis=0)
new_index = np.random.choice(n, size=n, replace=False)
# after randomizing (you may want a copy of them instead of a view):
a2 = a[new_index].copy()
b2 = b[new_index].copy()
Ответ №2:
Один из подходов заключается в создании массива индексов, его перетасовке, а затем упорядочивании по нему других массивов:
size = len(a)
indexes = np.arange(size)
new_a = np.empty(size)
new_b = np.empty(size)
new_b = np.empty(size)
for i in range(size):
new_a[i] = a[indexes[i]]
new_b[i] = b[indexes[i]]
new_c[i] = c[indexes[i]]
Ответ №3:
Используя генератор случайных, применяйте то же самое seed
перед каждой shuffle
операцией.
import numpy as np
a = np.array([[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]])
b = np.array([[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]])
c = np.array([1, 2, 3])
SEED = 123456789
rng = np.random.default_rng(SEED)
rng.shuffle(a,axis=0)
rng = np.random.default_rng(SEED)
rng.shuffle(b,axis=0)
rng = np.random.default_rng(SEED)
rng.shuffle(c,axis=0)
Вывод из a, b и c
(array([[2, 3, 4, 5],
[3, 4, 5, 6],
[1, 2, 3, 4]]),
array([[2, 3, 4, 5],
[3, 4, 5, 6],
[1, 2, 3, 4]]),
array([2, 3, 1]))