defzscore(data:Tensor,epsilon:float=1e-7)->Tensor:"""Apply Zscore processing to a given tensor or array. This method can be used with Numpy data: ```python n = np.array([[0,1],[2,3]]) b = fe.backend.zscore(n) # [[-1.34164079, -0.4472136 ],[0.4472136 , 1.34164079]] ``` This method can be used with TensorFlow tensors: ```python t = tf.constant([[0,1],[2,3]]) b = fe.backend.zscore(t) # [[-1.34164079, -0.4472136 ],[0.4472136 , 1.34164079]] ``` This method can be used with PyTorch tensors: ```python p = torch.tensor([[0,1],[2,3]]) b = fe.backend.zscore(p) # [[-1.34164079, -0.4472136 ],[0.4472136 , 1.34164079]] ``` Args: data: The input tensor or array. Returns: Data after substracting mean and divided by standard deviation. Raises: ValueError: If `tensor` is an unacceptable data type. """iftf.is_tensor(data):data=tf.cast(data,tf.float32)mean=tf.reduce_mean(data)std=tf.keras.backend.std(data)return(data-mean)/tf.maximum(std,epsilon)elifisinstance(data,torch.Tensor):data=data.type(torch.float32)mean=torch.mean(data)std=torch.std(data,unbiased=False)return(data-mean)/torch.max(std,torch.tensor(epsilon))elifisinstance(data,np.ndarray):mean=np.mean(data)std=np.std(data)return(data-mean)/max(std,epsilon)else:raiseValueError("Unrecognized data type {}".format(type(data)))