You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					25 lines
				
				785 B
			
		
		
			
		
	
	
					25 lines
				
				785 B
			| 
								 
											9 months ago
										 
									 | 
							
								class MovingAverage:
							 | 
						||
| 
								 | 
							
								  def __init__(self, window_size: int):
							 | 
						||
| 
								 | 
							
								    self.window_size: int = window_size
							 | 
						||
| 
								 | 
							
								    self.buffer: list[float] = [0.0] * window_size
							 | 
						||
| 
								 | 
							
								    self.index: int = 0
							 | 
						||
| 
								 | 
							
								    self.count: int = 0
							 | 
						||
| 
								 | 
							
								    self.sum: float = 0.0
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def add_value(self, new_value: float):
							 | 
						||
| 
								 | 
							
								    # Update the sum: subtract the value being replaced and add the new value
							 | 
						||
| 
								 | 
							
								    self.sum -= self.buffer[self.index]
							 | 
						||
| 
								 | 
							
								    self.buffer[self.index] = new_value
							 | 
						||
| 
								 | 
							
								    self.sum += new_value
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Update the index in a circular manner
							 | 
						||
| 
								 | 
							
								    self.index = (self.index + 1) % self.window_size
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    # Track the number of added values (for partial windows)
							 | 
						||
| 
								 | 
							
								    self.count = min(self.count + 1, self.window_size)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  def get_average(self) -> float:
							 | 
						||
| 
								 | 
							
								    if self.count == 0:
							 | 
						||
| 
								 | 
							
								      return float('nan')
							 | 
						||
| 
								 | 
							
								    return self.sum / self.count
							 |