Can you explain how to perform Z-score normalization (also known as standardization) using numpy, and discuss the key differences between min-max normalization and Z-score normalization in terms of their effects on the data distribution?