web-dev-qa-db-ja.com

異なるファイルのデータとラベルを同じ順序でランダムにシャッフルします

l 2つのnumpy配列があり、最初の配列にはデータが含まれ、2番目の配列にはラベルが含まれます。 lラベルに関してデータをシャッフルしたい。別の方法で、ラベルとデータを同じ順序でシャッフルするにはどうすればよいですか。

import numpy as np
data=np.genfromtxt("dataset.csv", delimiter=',')
classes=np.genfromtxt("labels.csv",dtype=np.str , delimiter='\t')

x=np.random.shuffle(data)
y=x[classes]

これはシャッフルの順序を維持しますか?

8
vincent

np.random.permutation を使用して要素のランダムな順序を生成し、それらを使用して配列dataおよびclassesにインデックスを付けます-

idx = np.random.permutation(len(data))
x,y = data[idx], classes[idx]
14
Divakar

または、以下に示すように、データとラベルを連結してシャッフルしてから、入力xラベルyに分割することもできます。

def read_data(filename, delimiter, datatype): # Read data from a file
    return = np.genfromtxt(filename, delimiter, dtype= datatype)

classes = read_data('labels.csv', dtype= np.str , delimiter='\t')
data = read_data('data.csv', delimiter=',')
dataset = np.r_['1', data, classes] # Concatenate along second axis

def dataset_shuffle(dataset): # Returns separated shuffled data and classes from dataset 
    np.random.shuffle(dataset)
    n, m = dataset.shape
    x = data[:, 0:m-1]
    y = data[:, m-1]
    return x, y # Return shuffled x and y with preserved order
0
iun1x