首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机化两个列表(Numpy in)并维护python中的顺序

随机化两个列表(Numpy in)并维护python中的顺序
EN

Stack Overflow用户
提问于 2018-12-29 23:54:25
回答 3查看 92关注 0票数 3

我有两个2d数字列表。我想对它进行混洗,但只是在外面进行混洗。

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

我见过randomizing two lists and maintaining order in python,但这看起来不适合我。

下面的代码就是我现在所做的。

但对于大的麻木列表来说,它太慢了。

代码语言:javascript
复制
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)

有没有更快或者更快的方法呢?

谢谢你的回答。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-30 00:04:48

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

代码语言:javascript
复制
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]
票数 3
EN

Stack Overflow用户

发布于 2018-12-30 00:00:52

我不是100%的性能,但我认为这可能对你更好:

代码语言:javascript
复制
newa = np.copy(a)
np.random.shuffle(newa)
newb = np.copy(b)
np.random.shuffle(newb)

你需要它们以相同的随机顺序排列吗?那么,如果元素1移动到newa中的位置3,那么这种移动也应该发生在newb中吗?这就是你的代码是如何的,但是你没有在你的问题中指定。如果你想对这两个进行同样的混洗,你需要这样做:

代码语言:javascript
复制
indexes = np.arrange(len(a))
np.random.shuffle(indexes)
newa = a[indexes]
newb = b[indexes]

这将比你拥有的更快,因为所有的append调用都会减慢你的速度。

票数 1
EN

Stack Overflow用户

发布于 2018-12-30 00:10:57

使用numpy本身的shuffle选项,效率会高得多。

代码语言:javascript
复制
np.random.shuffle(a)
np.random.shuffle(b)

print(a)
#
[[ 4  5  6]
 [10 11 12]
 [ 7  8  9]
 [ 1  2  3]]
print(b)
#
[[600 700 800 900 901]
 [100 200 300 400 500]
 [501 502 503 504 505]
 [101 102 103 104 105]]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53971040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档