Umformen eines Numpy-Arrays codierter DatenPython

Python-Programme
Anonymous
 Umformen eines Numpy-Arrays codierter Daten

Post by Anonymous »

Ich versuche, ein ziemlich großes Array codierter Daten effizient umzuformen. Das ursprüngliche Array (orig_array) wird mithilfe der Thermometer-Kodierung (enc_array)
codiert

Code: Select all

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))
Ich habe zwei Fragen: Erstens möchte ich beim Codieren von Daten (Thermometer-Codierung) „sliding_window_view“ (oder eine andere nette Methode) anwenden, sodass das resultierende Array wie folgt aussieht: (Jeder 3 optisch getrennte Ints entspricht einem codierten Feature)

Code: Select all

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]])
Die erste Zeile dieses Arrays entspricht Daten wie folgt:
[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]
Die 2. Zeile dieses Arrays entspricht Daten wie
[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]
und die 3. Zeile dieses Arrays entspricht Daten, so dass
[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]
Zweitens möchte ich die folgende Form und Reihenfolge der Elemente erhalten (Form ist 3x9x4):

Code: Select all

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]]]
Natürlich besteht eine Möglichkeit darin, eine Schleife zu verwenden, aber ich suche nach einer effizienteren Möglichkeit. Ich denke, dass dies durch die Anwendung einer Kombination aus Sliding_Window_View und Step Slicing erreicht werden kann. Aber ich hänge schon seit einiger Zeit daran fest und komme einfach nicht dahinter. Ich würde mich über Vorschläge freuen.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post