Изменение формы массива закодированных данныхPython

Программы на Python
Ответить
Anonymous
 Изменение формы массива закодированных данных

Сообщение Anonymous »

Я пытаюсь эффективно преобразовать довольно большой массив закодированных данных. Исходный массив (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 разделенных целых числа визуально соответствуют одному закодированному признаку)

Код: Выделить всё

dyn_enc_array = np.array([
[1,0,0, 0,0,0, 1,1,0, 1,0,0, 1,1,0, 1,0,0, 0,0,0, 1,1,1, 1,0,0, 1,1,1, 0,0,0, 1,0,0],
[1,1,0, 1,0,0, 0,0,0, 1,1,1, 1,0,0, 1,1,1, 0,0,0, 1,0,0, 1,1,0, 0,0,0, 1,1,1, 1,0,0],
[1,0,0, 1,1,1, 0,0,0, 1,0,0, 1,1,0, 0,0,0, 1,1,1, 1,0,0, 0,0,0, 1,0,0, 1,1,0, 1,0,0]])
1-я строка этого массива соответствует таким данным, что
[encoded_feature1@t=0, encoded_feature2@t=0, encoded_feature3@t=0, encoded_feature4@t=0,
encoded_feature1@t=1, encoded_feature2@t=1, encoded_feature3@t=1, encoded_feature4@t=1,
encoded_feature1@t=2, encoded_feature2@t=2, encoded_feature3@t=2, encoded_feature4@t=2]
2-я строка этого массива соответствует таким данным, что
[encoded_feature1@t=1, encoded_feature2@t=1, encoded_feature3@t=1, encoded_feature4@t=1,
encoded_feature1@t=2, encoded_feature2@t=2, encoded_feature3@t=2, encoded_feature4@t=2,
encoded_feature1@t=3, encoded_feature2@t=3, encoded_feature3@t=3, encoded_feature4@t=3]
и 3-я строка этого массива соответствует таким данным, что
[encoded_feature1@t=2, encoded_feature2@t=2, encoded_feature3@t=2, encoded_feature4@t=2,
encoded_feature1@t=3, encoded_feature2@t=3, encoded_feature3@t=3, encoded_feature4@t=3,
encoded_feature1@t=4, encoded_feature2@t=4, encoded_feature3@t=4, encoded_feature4@t=4]
Во-вторых, я хотел бы получить следующую форму и порядок элементов (форма – 3x9x4):

Код: Выделить всё

result = [[[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]],

[[1,1,0, 1,0,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]],

[[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]]]
Очевидно, что один из способов — использовать цикл, но я ищу более эффективный способ. Я думаю, что это можно сделать, применив комбинациюскользящего_окна_вида и ступенчатой ​​нарезки. Но я застрял на этом какое-то время и просто не могу понять. Буду признателен за любые предложения.

Подробнее здесь: https://stackoverflow.com/questions/798 ... coded-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»