Как я могу создать парную функцию, используя цикл for

#python #python-3.x

Вопрос:

У меня есть массив NumPy, и я хочу создать все возможные пары для сиамской сети, используя цикл for a.

Приведенная ниже функция просто создает равные пары как для числа положительных, так и для отрицательных изображений.

Негативные образы: это просто образы, которые отличаются друг от друга.

позитивные образы: это одинаковые образы.

Возьмем, к примеру, у нас есть изображения и надписи, как показано ниже, где алфавиты представляют изображения.

этикетки = array([3,2,1,4], dtype=int32)

Изображения = array([A,B,C,D,E,A,C,B,C,A,B,C] dtype=int32)

Приведенная ниже функция просто выводит данные. положительные пары = [[A,A],[B,B],[C,C],[D,D],[E,E] с метками как 1 . и для отрицательных пар [[A,B],[B,A],[C,D],[D,A],[E,D] с метками как 0 .

Я хочу вывести все возможные отрицательные пары следующим образом [[A,B],[A,C],[A,D],[A,E],[B,A],[B,C],[B,D],[B,E],[C,A],[C,B],[C,D],[C,E],[D,A],[D,B],[D,C],[D,E],[E,A],[E,B],[E,C],[E,D]

 def make_pairs(images, labels):  # initialize two empty lists to hold the (image, image) pairs and  # labels to indicate if a pair is positive or negative  pairImages = []  pairLabels = []  # calculate the total number of classes present in the dataset  # and then build a list of indexes for each class label that  # provides the indexes for all examples with a given label  numClasses = len(np.unique(labels))  idx = [np.where(labels == i)[0] for i in range(0, numClasses)]  # loop over all images  for idxA in range(len(images)):  # grab the current image and label belonging to the current  # iteration  currentImage = images[idxA]  label = labels[idxA]  # randomly pick an image that belongs to the *same* class  # label  idxB = np.random.choice(idx[label])  posImage = images[idxB]  # prepare a positive pair and update the images and labels  # lists, respectively  pairImages.append([currentImage, posImage])  pairLabels.append([1])  # grab the indices for each of the class labels *not* equal to  # the current label and randomly pick an image corresponding  # to a label *not* equal to the current label  negIdx = np.where(labels != label)[0]  negImage = images[np.random.choice(negIdx)]  # prepare a negative pair of images and update our lists  pairImages.append([currentImage, negImage])  pairLabels.append([0])  # return a 2-tuple of our image pairs and labels  return (np.array(pairImages), np.array(pairLabels))  print("[INFO] preparing positive and negative pairs...") pairs_train, labels_train = make_pairs(X_train, Y_train)