gpt4 book ai didi

numpy - 如何在 numpy 的组内洗牌而不是在组内洗牌?

转载 作者:行者123 更新时间:2023-12-05 05:46:25 25 4
gpt4 key购买 nike

我需要按行随机播放,因为我知道每行中的第一个值是天数。同一天编号的行应放在一起。组可能包含 1、2、3 或 4 行。每行具有相同数量的值。希望下面的示例能告诉您更多信息。

我有这个:

a = np.array([
[0, 0.02, 0.03, 0.04],
[0, 0.02, 0.03, 0.04],
[0, 0.02, 0.03, 0.04],

[1, 0.12, 0.13, 0.14],

[2, 0.22, 0.23, 0.24],
[2, 0.22, 0.23, 0.24],

[3, 0.32, 0.33, 0.34],
[3, 0.32, 0.33, 0.34],
[3, 0.32, 0.33, 0.34],
[3, 0.32, 0.33, 0.34]
])

我需要这个:

a = np.array([
[3, 0.32, 0.33, 0.34],
[3, 0.32, 0.33, 0.34],
[3, 0.32, 0.33, 0.34],
[3, 0.32, 0.33, 0.34],

[0, 0.02, 0.03, 0.04],
[0, 0.02, 0.03, 0.04],
[0, 0.02, 0.03, 0.04],

[2, 0.22, 0.23, 0.24],
[2, 0.22, 0.23, 0.24],

[1, 0.12, 0.13, 0.14]
])

最佳答案

这种使用 python 的 random.sample 来置换 arrayslist 的方法并不快,但更容易理解。这仅在组事先按 block 排序时才有效。

import random
random.seed(25) # used for reproducibility only

groups = a[:,0].astype('int')
idx = (groups[1:] ^ groups[:-1]).nonzero()[0] + 1
np.vstack(random.sample(np.split(a, idx), len(idx)+1))

输出

array([[3.  , 0.32, 0.33, 0.34],
[3. , 0.32, 0.33, 0.34],
[3. , 0.32, 0.33, 0.34],
[3. , 0.32, 0.33, 0.34],
[0. , 0.02, 0.03, 0.04],
[0. , 0.02, 0.03, 0.04],
[0. , 0.02, 0.03, 0.04],
[2. , 0.22, 0.23, 0.24],
[2. , 0.22, 0.23, 0.24],
[1. , 0.12, 0.13, 0.14]])

关于numpy - 如何在 numpy 的组内洗牌而不是在组内洗牌?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71193001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com