Найти средние координаты для каждого классификатора в списке - PullRequest
0 голосов
/ 02 марта 2020

Я хочу написать функцию, которая принимает два ввода:

points - это список точек с координатами, а

classiification - это список из 1 или 0 из длина n на m, где n - количество значений в points, а m - количество классификаций.

Функция будет возвращать среднее значение координат, присвоенных каждой классификации. В этом примере есть 2 классификации, и каждая координата в points может быть назначена только одной классификации (помечена 1, все остальные помечены 0).

Пример ниже:

points = np.array([[1,1], [2,4], [4,6], [5,6], [6,6]])
classification = np.array([[1, 0],[1, 0],[0, 1],[0, 1],[0, 1]])
my_func(points, classification) #--> np.array([[1.5 , 2.5],
                                #              [5. , 6. ]])

Таким образом, первая точка (1,1) была назначена первому классификатору (1,0), а третья точка (4,6) была назначена второму классификатору (0,1) ).

Как лучше всего подойти к этому? Спасибо

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

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

points = np.array([[1,1], [2,4], [4,6], [5,6], [6,6]])
classification = np.array([[1, 0],[1, 0],[0, 1],[0, 1],[0, 1]])

Я преобразую список списков в список кортежей на следующем шаге, поскольку списки не могут выступать в качестве ключей для словарей из-за их изменчивой природы.

classification =[tuple(i) for i in classification]
dic={}
for i,j in zip(classification,points):
    if i not in dic.keys():
        dic[i]=[list(j)]
    else:
        dic[i].append(list(j))
[[sum(elem)/len(elem) for elem in zip(*j)] for i,j in dic.items()]

Надеюсь, это поможет.

0 голосов
/ 02 марта 2020
  1. создайте два массива, result и count, оба с количеством классификаций в качестве их размера, инициализируйте каждое значение равным [0, 0] для результата и 0 для подсчета.
  2. возьмите следующую точку и классификацию, пока не останется ни одного
  3. используйте classification.index(1), чтобы найти индекс для result и count массива
  4. , добавьте значения точки до соответствующего result и увеличиваем соответствующий count
  5. , повторяя шаг 2
  6. , делим каждое значение в результате на соответствующее count значение
  7. return result

Я предоставлю вам право написать код для него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...