/// <summary> /// /// </summary> /// <param name="wrapped">The wrapped sensor</param> /// <param name="numStackedObservations">Number of stacked observations to keep</param> public StackingSensor(ISensor wrapped, int numStackedObservations) { // TODO ensure numStackedObservations > 1 m_WrappedSensor = wrapped; m_NumStackedObservations = numStackedObservations; m_Name = $"StackingSensor_size{numStackedObservations}_{wrapped.GetName()}"; var shape = wrapped.GetFloatObservationShape(); m_Shape = new int[shape.Length]; m_UnstackedObservationSize = wrapped.ObservationSize(); for (int d = 0; d < shape.Length; d++) { m_Shape[d] = shape[d]; } // TODO support arbitrary stacking dimension m_Shape[0] *= numStackedObservations; m_StackedObservations = new float[numStackedObservations][]; for (var i = 0; i < numStackedObservations; i++) { m_StackedObservations[i] = new float[m_UnstackedObservationSize]; } }
/// <summary> /// Get the total number of elements in the ISensor's observation (i.e. the product of the shape elements). /// </summary> /// <param name="sensor"></param> /// <returns></returns> public static int ObservationSize(this ISensor sensor) { var shape = sensor.GetFloatObservationShape(); int count = 1; for (var i = 0; i < shape.Length; i++) { count *= shape[i]; } return(count); }