<｜begin▁of▁sentence｜>### Instruction:
As an urban designer, imagine that you're working on a comprehensive analysis of different city zones, evaluating features like population density, traffic patterns, park distribution, and housing statistics. Now, this complex data is compiled into a matrix X where each row embodies a particular zone and each column captures a specific characteristic of these zones.

To refine the insights you can glean from this information and to streamline the intricate dataset, there's a need to apply a technique akin to simplifying a complex blueprint. You decide to employ a method akin to the architectural practice of distilling design elements, known as singular value decomposition (SVD). This task is not only about reducing dimensions; you also want to determine the most significant characteristics—or in SVD terms, the optimal number of components—that best represent the variability of your urban data.

The method you're looking for is ingrained within the graspologic library, specifically through the `select_svd` function. This tool will assist in automatically calculating the ideal number of components you should retain, akin to deciding how many key landmarks should define a city's skyline. This process is guided by an algorithm designed by Zhu & Godsie, which is like having an expert urban planning consultant advising on the most critical structural elements of your design.

In execution, when you apply `select_svd` to your dataset, you will receive decomposed outputs—those can be thought of as architectural drawings, where U represents the foundational blueprint of zones (rows for each urban zone), D symbolizes the strength or prominence of each feature (singular values), and V could be seen as the bird’s-eye view of features across all zones (columns for each characteristic).

Now, the shapes of the resulting matrices containing the left singular vectors (U), singular values (D), and right singular vectors (V) will transform your multidimensional urban data into a more manageable and interpretable set of plans. Could you envision how this might streamline your urban analysis process?
### Response:
import numpy as np
from graspologic.embed import select_svd

# Given data matrix X with shape (n_samples, n_features)
X = np.random.rand(100, 50)

# Perform SVD with automatic dimensionality selection
# We do not specify n_components, so the number of components will be chosen automatically
# based on the Zhu & Godsie algorithm
U, D, V = select_svd(X, n_components=None, n_elbows=2, algorithm='randomized')

# The output U, D, V matrices contain the left singular vectors, singular values,
# and right singular vectors respectively
print('U shape:', U.shape)
print('D shape:', D.shape)
print('V shape:', V.shape)
<|EOT|>
