Python 如何在numpy数组中仅洗牌行索引?

Python 如何在numpy数组中仅洗牌行索引?,python,python-2.7,numpy,Python,Python 2.7,Numpy,我有两个numpy数组。我只想同时洗牌它们的行索引。虽然我均衡了它们的行索引,但当我洗牌a时,为什么它不会自动洗牌b a = np.arange(100).reshape(10,10) b = np.arange(10).reshape(10,1) a.shape[0]==b.shape[0] np.random.shuffle(a) print a print b 这毫无意义,你想做的事情可以如下所示: a = np.arange(100).reshape(10,10) b =

我有两个numpy数组。我只想同时洗牌它们的行索引。虽然我均衡了它们的行索引,但当我洗牌a时,为什么它不会自动洗牌b

 a = np.arange(100).reshape(10,10)
 b = np.arange(10).reshape(10,1)
 a.shape[0]==b.shape[0]
 np.random.shuffle(a)
 print a
 print b

这毫无意义,你想做的事情可以如下所示:

a = np.arange(100).reshape(10,10)
b = np.arange(10).reshape(10,1)
p = np.random.permutation(a.shape[0])
a = a[p]
b = b[p]
print a
print b

你不能以这种方式将两个
numpy
数组结合起来,迫使它们保持相同的顺序。您可以做的是将顺序保存在一个单独的数组中,然后根据它对它们进行排序

a = np.arange(100).reshape(10,10)
b = np.arange(10).reshape(10,1)
i = np.random.shuffle(np.arange(a.size[0]))
print a[i]
print b[i]
使用:


在对数组进行适当排序时,在我的代码的最后两行中,只有一个所谓的
视图
,显示创建的数组
a
b
。如果随后选中
a
b
,它们仍然相同。因此,如果你想使用洗牌版本,你应该使用类似于
a=a[perm,:]
c=(a[perm,:]).copy()

难道
a.shape[0]==b.shape[0]
不是无用的语句吗?布尔结果刚刚丢失,或者这是来自REPL会话?什么?为什么你希望用洗牌a来洗牌b?虽然
a.shape[0]==b.shape[0]
中隐含的功能很好(基本上是将两个数组按相同顺序结合起来),但它不是
numpy
数组的正常功能,需要一个全新的类来实现它。
import numpy as np

a = np.arange(100).reshape(10,10)
b = np.arange(10).reshape(10,1)
perm = np.random.permutation(a.shape[0])
print(a[perm, :])
print(b[perm, :])