Допустим, у вас есть массив точек данных размером 8x3
data = np.arange(50,74).reshape(8,-1)
Если вы действительно хотите выбрать, как вы говорите, все индексы как 2d пары, самый компактный способ сделать это,я могу думать о том, что:
#generate a permutation of data's size, coerced to data's shape
idxs = divmod(np.random.permutation(data.size),data.shape[1])
#iterate over it
for x,y in zip(*idxs):
#do something to data[x,y] here
pass
Мое вообще, хотя, часто не нужно обращаться к 2d массивам как 2d массиву просто, чтобы перемешать их, в этом случае можно быть еще более компактным.просто сделайте 1-мерный просмотр массива и сэкономьте себе немного разбитости индексов.
flat_data = data.ravel()
flat_idxs = np.random.permutation(flat_data.size)
for i in flat_idxs:
#do something to flat_data[i] here
pass
Это все равно будет переставлять 2d "оригинальный" массив, как вам бы хотелось.Чтобы увидеть это, попробуйте:
flat_data[12] = 1000000
print data[4,0]
#returns 1000000