Я пытаюсь установить образец фиксированного [Mx1] вектор в любые данные [Nx1] размеры с использованием метода усреднения. У меня есть динамический размер окна, который изменяется каждый раз в зависимости от требуемого массива вывода. Таким образом, в некоторых случаях мне повезло и получить размер окна int, который идеально подходит в соответствии с размером окна, и иногда я получаю плавающее число как размер окна. Но, как я могу использовать окна с плавающим размером, чтобы сделать вектор [Nx1] размер от фиксированного [Mx1] вектор?Как мы можем опробовать значения массива 1D методом усреднения с использованием размеров окна float и int?
Ниже приведен код, который я пробовал:
chunk = 0.35
def fixed_meanVector(vec, chunk):
size = (vec.size*chunk) #size of output according to the chunk
R = (vec.size/size) #windows size to transform array into chunk size
pad_size = math.ceil(float(vec.size)/R)*R - vec.size
vec_padded = np.append(vec, np.zeros(pad_size)*np.NaN)
print "Org Vector: ",vec.size, "output Size: ",size, "Windows Size: ",R, "Padding size", pad_size
newVec = scipy.nanmean(vec_padded.reshape(-1,R), axis=1)
print "New Vector shape: ",newVec.shape
return newVec
print "Word Mean of N values Similarity: ",cosine(fixed_meanVector(vector1, chunk)
,fixed_meanVector(vector2, chunk))
Выход:
New Vector shape: (200,)
Org Vector: 400 output Size: 140.0 Windows Size: 2.85714285714 Padding size 0.0
New Vector shape: (200,)
0.46111661289
В приведенном выше примере, мне нужно вниз образец [Mx1]([ 400x1]) вектор в Nx1([140x1]) размеры. Таким образом, динамически размер окна [2.857x1] может использоваться для downsample [Mx1] вектор. Но в этом случае я получаю вектор [200x1] как мой вывод вместо [140x1] из-за плавающее окно она поднимает на муки (2,85) она субдискретизация с ->[2x1] , Заполнение нуля, потому что мой размер окна идеально подходит для новых [Nx1] размеры. Итак, есть ли какой-либо способ использовать такой тип размеров окон для прогона a [Mx1] vector?
Является ли число N фиксированным? – Hun
@sung Нет ... Это размер вывода ... И в коде это ... size = (vec.size * chunk) –
Если оба M и N не фиксированы, это немного сложно придумать очень общий алгоритм. Поскольку ваш вектор не слишком большой, я бы сказал, сделайте это итеративно. Я имею в виду, что это скользящее среднее с использованием полного целого. Затем у вас будет больший, чем требуется, дискретный вектор. Вы можете повторить процесс снова с помощью нового вектора и т. Д. – Hun