Я сначала задаюсь вопросом, что такое labels
на каждом шагу в цикле?
С dist_ = array([2,1,2])
и TLabels=array([1,2,3])
я
[-1 1]
[1]
[-1 1]
Различная длина немедленно поднять флаг предупреждения - это может быть трудно векторизации это.
С более длинными массивами в отредактированном примере
[-1 1 -1 -1 -1]
[ 1 1 1 1 -1]
[-1 1 -1 -1 -1]
[ 1 1 1 1 -1]
[ 1 1 1 1 -1]
[-1 1 -1 -1 -1]
[-1 1 -1 -1 -1]
[ 1 1 1 1 -1]
[ 1 1 1 1 -1]
[-1 1 -1 -1 -1]
В labels
векторах являются все же длиной. Это нормально или просто совпадение ценностей?
Капля пару элементов прочь dist_
и labels
являются:
In [375]: for i in range(len(dist_)):
labels = TLabels[dist_ == dist_[i]]
v = (1.*np.sum(labels)/t); v1 = 1-TLabels[i]*v
print(labels, v, TLabels[i], v1)
cLoss += v1
.....:
(array([-1, 1, -1, -1]), -0.25, -1, 0.75)
(array([1, 1, 1, 1]), 0.5, 1, 0.5)
(array([-1, 1, -1, -1]), -0.25, 1, 1.25)
(array([1, 1, 1, 1]), 0.5, 1, 0.5)
(array([1, 1, 1, 1]), 0.5, 1, 0.5)
(array([-1, 1, -1, -1]), -0.25, -1, 0.75)
(array([-1, 1, -1, -1]), -0.25, -1, 0.75)
(array([1, 1, 1, 1]), 0.5, 1, 0.5)
Снова разные длины этикетки, но на самом деле лишь несколько расчетов. Значение 1 v
для каждого значения dist_
.
Без уточнения всех деталей, похоже, вы просто вычисляете labels*labels
для каждого отдельного значения dist_
, а затем суммируете его.
Это выглядит как проблема groupBy
. Вы хотите разделить dist_
на группы с общим значением и суммировать некоторую функцию их соответствующих значений TLabels
. Python itertools
имеет функцию groupBy
, поэтому pandas
. Я думаю, что оба требуют от вас сортировать dist_
.
Попробуйте отсортировать dist_
и посмотреть, добавляет ли это ясность в проблему.
Что вы пытаетесь достичь? –
Ну, я считаю, что это правильно: 'TLabels [dist_ == dist_ [i]]' будет возвращать значения из 'TLabels', которые имеют индексы, где' dist_ == dist_ [i] '. Например, пусть 'dist_ = array ([2,1,2])' и 'TLabels = array ([1,2,3])' so 'dist_ == dist_ [0]' будет возвращать 'array ([True, False, True]) 'чем' TLabels [dist_ == dist_ [0]] = array ([1,3]) ' – farhawa
Просто, чтобы быть ясным, массивы' (t, 1) 'или' (t,) '? Где инициализируется 'cLoss'? – hpaulj