Я пытаюсь эффективно преобразовать довольно большой массив закодированных данных. Исходный массив (orig_array) кодируется с использованием кодировки термометра (enc_array)
import numpy as np
from numpy.lib.stride_tricks import sliding_window_view
n_features = 4
time_window = 3
n_bins = 3
orig_array = np.array([1,0,2,1,2,1,0,3,1,3,0,1,2,0,3,1,0,1,2,1])
def encode(arr, n_bins):
res = np.stack([np.pad(np.ones(t), (0,n_bins - t), 'constant') for t in arr])
return res.flatten()
# apply thermometer encoding & reshape
enc_array = encode(orig_array, n_bins)
reshp_array = np.reshape(enc_array, (5,12))
У меня есть 2 вопроса:
Во-первых, когда данные кодируются (кодирование термометра), я хотел бы применитьскользящий_window_view (или какой-либо другой аккуратный способ), чтобы результирующий массив стал следующим: (каждые 3 целых числа, разделенные визуально, соответствуют одному закодированному признаку)
Очевидно, что один из способов — использовать цикл, но я ищу более эффективный способ. Я думаю, что это можно сделать, применив комбинациюскользящего_окна_вида и ступенчатой нарезки. Но я застрял на этом какое-то время и просто не могу понять. Буду признателен за любые предложения.
Я пытаюсь эффективно преобразовать довольно большой массив закодированных данных. Исходный массив (orig_array) кодируется с использованием кодировки термометра (enc_array) [code]import numpy as np from numpy.lib.stride_tricks import sliding_window_view
[[1,0,0, 1,1,0, 1,0,0], [0,0,0, 1,0,0, 1,1,1], [1,1,0, 0,0,0, 0,0,0], [1,0,0, 1,1,1, 1,0,0]]] [/code] Очевидно, что один из способов — использовать цикл, но я ищу более эффективный способ. Я думаю, что это можно сделать, применив комбинациюскользящего_окна_вида и ступенчатой нарезки. Но я застрял на этом какое-то время и просто не могу понять. Буду признателен за любые предложения.