Медиана Pytorch - это ошибка или я использую это неправильно - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь получить медиану каждого ряда 2D torch.tensor.Но результат не тот, который я ожидаю по сравнению с работой со стандартным массивом или numpy

import torch
import numpy as np
from statistics import median

print(torch.__version__)
>>> 0.4.1

y = [[1, 2, 3, 5, 9, 1],[1, 2, 3, 5, 9, 1]]
median(y[0])
>>> 2.5

np.median(y,axis=1)
>>> array([2.5, 2.5])

yt = torch.tensor(y,dtype=torch.float32)
yt.median(1)[0]
>>> tensor([2., 2.])

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Вы можете подражать NumPy Медиана с Pytorch:

import torch
import numpy as np
y =[1, 2, 3, 5, 9, 1]
print("numpy=",np.median(y))
print(sorted([1, 2, 3, 5, 9, 1]))
yt = torch.tensor(y,dtype=torch.float32)
ymax = torch.tensor([yt.max()])
print("torch=",yt.median())
print("torch_fixed=",(torch.cat((yt,ymax)).median()+yt.median())/2.)
0 голосов
/ 22 января 2019

Похоже, что это предполагаемое поведение Факела, как упомянуто в этом выпуске

https://github.com/pytorch/pytorch/issues/1837
https://github.com/torch/torch7/pull/182

Обоснование, как упомянуто в ссылке выше

Медиана возвращает «средний» элемент в случае нечетного множества элементов, в противном случае элемент «один перед средним» (можно было бы также использовать другое соглашение для получения среднего значения двух элементов «посередине», но это было быв два раза дороже, поэтому я решил за это).

...