我有一个4D数组训练图像,其维度对应于(image_number,channels,width,height)。我也有一个2D目标标签,其维度对应于(image_number,class_number)。当训练时,我想使用random.shuffle随机 Shuffle 数据,但我如何保持标签按我的图像的相同顺序 Shuffle ?谢谢!
px9o7tmv1#
from sklearn.utils import shuffle import numpy as np X = np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2], [3, 3, 3], [4, 4, 4]]) y = np.array([0, 1, 2, 3, 4]) X, y = shuffle(X, y) print(X) print(y) [[1 1 1] [3 3 3] [0 0 0] [2 2 2] [4 4 4]] [1 3 0 2 4]
iqjalb3h2#
还有另一种简单的方法,让我们假设总共有N个图像,然后我们可以做以下事情:
N
from random import shuffle ind_list = [i for i in range(N)] shuffle(ind_list) train_new = train[ind_list, :,:,:] target_new = target[ind_list,]
zqdjd7g93#
如果你想要一个只有数字的解决方案,你可以在第一个数组上重新索引第二个数组,假设你在两个数组中有相同的图像编号:
In [67]: train = np.arange(20).reshape(4,5).T In [68]: target = np.hstack([np.arange(5).reshape(5,1), np.arange(100, 105).reshape(5,1)]) In [69]: train Out[69]: array([[ 0, 5, 10, 15], [ 1, 6, 11, 16], [ 2, 7, 12, 17], [ 3, 8, 13, 18], [ 4, 9, 14, 19]]) In [70]: target Out[70]: array([[ 0, 100], [ 1, 101], [ 2, 102], [ 3, 103], [ 4, 104]]) In [71]: np.random.shuffle(train) In [72]: target[train[:,0]] Out[72]: array([[ 2, 102], [ 3, 103], [ 1, 101], [ 4, 104], [ 0, 100]]) In [73]: train Out[73]: array([[ 2, 7, 12, 17], [ 3, 8, 13, 18], [ 1, 6, 11, 16], [ 4, 9, 14, 19], [ 0, 5, 10, 15]])
ovfsdjhp4#
如果你正在寻找一个同步/一致 Shuffle ,你可以使用以下功能。
def unisonShuffleDataset(a, b): assert len(a) == len(b) p = np.random.permutation(len(a)) return a[p], b[p]
上面的例子只适用于2个变量。2通过在函数和函数的返回值上增加输入变量的数量,可以扩展到2个以上。
cidc1ykv5#
根据您要执行的操作,您还可以使用为数组的每个维度随机生成一个数字
random.randint(a, b) #a and b are the extremes of your array
它会随机选择你的对象。
jdg4fx2g6#
使用相同的种子多次构建随机数生成器以混洗不同的数组:
>>> seed = np.random.SeedSequence() >>> arrays = [np.arange(10).repeat(i).reshape(10, -1) for i in range(1, 4)] >>> for ar in arrays: ... np.random.default_rng(seed).shuffle(ar) ... >>> arrays [array([[1], [2], [7], [8], [0], [4], [3], [6], [9], [5]]), array([[1, 1], [2, 2], [7, 7], [8, 8], [0, 0], [4, 4], [3, 3], [6, 6], [9, 9], [5, 5]]), array([[1, 1, 1], [2, 2, 2], [7, 7, 7], [8, 8, 8], [0, 0, 0], [4, 4, 4], [3, 3, 3], [6, 6, 6], [9, 9, 9], [5, 5, 5]])]
6条答案
按热度按时间px9o7tmv1#
iqjalb3h2#
还有另一种简单的方法,让我们假设总共有
N
个图像,然后我们可以做以下事情:zqdjd7g93#
如果你想要一个只有数字的解决方案,你可以在第一个数组上重新索引第二个数组,假设你在两个数组中有相同的图像编号:
ovfsdjhp4#
如果你正在寻找一个同步/一致 Shuffle ,你可以使用以下功能。
上面的例子只适用于2个变量。2通过在函数和函数的返回值上增加输入变量的数量,可以扩展到2个以上。
cidc1ykv5#
根据您要执行的操作,您还可以使用为数组的每个维度随机生成一个数字
它会随机选择你的对象。
jdg4fx2g6#
使用相同的种子多次构建随机数生成器以混洗不同的数组: