You shouldn’t see a difference between the numpy and PyTorch approach.
However, usually you would normalize the data using the statistics from the channels, i.e.:
x = torch.randint(0, 256, (3, 224, 224)).float()
y = (x - x.mean([1, 2], keepdim=True)) / x.std([1, 2], keepdim=True)
print(y.mean(), y.std())
> tensor(-4.6021e-08) tensor(1.0000)