TheAlgorithms/Python · error · ValueError
x and y have different lengths
Error message
x and y have different lengths
What it means
Raised by DecisionTree.train when len(x) != len(y). Every training sample needs exactly one label; mismatched lengths mean samples are unlabeled or orphan labels exist, so training is refused before any split search.
Source
Thrown at machine_learning/decision_tree.py:86
>>> dt.train(np.array([1,2,3,4,5]),np.array([[0,0,0,1,1],[0,0,0,1,1]]))
Traceback (most recent call last):
...
ValueError: x and y have different lengths
4. Try to train when x & y are of the same length but different dimensions
>>> dt = DecisionTree()
>>> dt.train(np.array([1,2,3,4,5]),np.array([[1],[2],[3],[4],[5]]))
Traceback (most recent call last):
...
ValueError: Data set labels must be one-dimensional
This section is to check that the inputs conform to our dimensionality
constraints
"""
if x.ndim != 1:
raise ValueError("Input data set must be one-dimensional")
if len(x) != len(y):
raise ValueError("x and y have different lengths")
if y.ndim != 1:
raise ValueError("Data set labels must be one-dimensional")
if len(x) < 2 * self.min_leaf_size:
self.prediction = np.mean(y)
return
if self.depth == 1:
self.prediction = np.mean(y)
return
best_split = 0
min_error = self.mean_squared_error(x, np.mean(y)) * 2
"""
loop over all possible splits for the decision tree. find the best split.
if no split exists that is less than 2 * error for the entire array
then the data set is not split and the average for the entire array is used asView on GitHub (pinned to f5988cc097)
Solutions
- Re-align the arrays: filter x and y together, e.g. mask = ~np.isnan(y); x, y = x[mask], y[mask].
- Check for accidental slicing (x[:100] vs y[:99]) in the train/test split code.
- Assert len(x) == len(y) right after loading data to catch drift early.
Example fix
# before dt.train(x, y[:-1]) # after dt.train(x, y) # or split both with the same indices: x[idx], y[idx]
Defensive patterns
Strategy: validation
Validate before calling
if len(x) != len(y):
n = min(len(x), len(y))
x, y = x[:n], y[:n] # only if truncation is safe; otherwise raise
assert len(x) == len(y)
dt.train(x, y) Type guard
def aligned_lengths(x, y) -> bool:
return len(x) == len(y) Try / catch
try:
dt.train(x, y)
except ValueError as e:
if "different lengths" in str(e):
raise ValueError("features and labels out of sync; check NaN filtering") from e
raise Prevention
- Filter x and y with the same boolean mask.
- Slice train/test sets with shared indices.
- Assert len equality immediately after loading.
When it happens
Trigger: Calling dt.train(x, y) where x and y come from different slices, e.g. x = all rows but y = y[:-1], or labels shuffled/filtered independently of features.
Common situations: Off-by-one in manual train/test slicing, dropping NaN labels without dropping the matching x rows, or merging features and labels from sources that got out of sync.
Related errors
- Input arrays must have the same length.
- Input data set must be one-dimensional
- Data set labels must be one-dimensional
- Decision tree not yet trained
- Test samples' feature length does not equal to that of train
AI-assisted analysis of TheAlgorithms/Python@f5988cc097 (2026-08-14).
Data as JSON: /api/errors/6fe6c09cac393bcb.
Report an issue: GitHub.