随机化两个列表(numpy in)并维持python中的顺序

2023-12-02

我有两个 2d numpy 列表。我想洗牌,但只是外侧洗牌。

如果我随机排列列表 a 的顺序,我希望列表 b 遵循列表 a 的顺序。

我见过在Python中随机化两个列表并保持顺序但这看起来对我不起作用。

下面的代码是我现在正在做的事情。

但对于大型 numpy 列表来说太慢了。

import numpy as np
import random    

a = np.array([[1,2,3], [4,5,6], [7,8,9], [10,11,12]])
b = np.array([[100,200,300,400,500], [600,700,800,900,901], [101,102,103,104,105], [501,502,503,504,505]])
r = [i for i in range(4)]
random.shuffle(r)
newa = np.empty((0, 3))
newb = np.empty((0, 5))
for rr in r:
    newa = np.append(newa, [a[rr]], axis=0)
    newb = np.append(newb, [b[rr]], axis=0)
print(newa)
print(newb)

有任何Pythonic或更快的方法来做到这一点吗?

感谢您的回答。


您的想法是正确的,但是附加到数组非常耗时,因为它每次都会重新分配整个缓冲区。相反,您可以只使用混洗索引:

a = np.array([[1,2,3], [4,5,6], [7,8,9], [10,11,12]])
b = np.array([[100,200,300,400,500], [600,700,800,900,901], [101,102,103,104,105], [501,502,503,504,505]])

r = np.arange(4)
np.random.shuffle(r)

newa = a[r]
newb = b[r]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

随机化两个列表(numpy in)并维持python中的顺序 的相关文章

随机推荐