Precomputed metric requires shape (n_queries, n_indexed). Got (%d, %d) for %d indexed.
Package:
scikit-learn
47032

Exception Class:
ValueError
Raise code
estimator=estimator)
Y = check_array(Y, accept_sparse=accept_sparse, dtype=dtype,
copy=copy, force_all_finite=force_all_finite,
estimator=estimator)
if precomputed:
if X.shape[1] != Y.shape[0]:
raise ValueError("Precomputed metric requires shape "
"(n_queries, n_indexed). Got (%d, %d) "
"for %d indexed." %
(X.shape[0], X.shape[1], Y.shape[0]))
elif X.shape[1] != Y.shape[1]:
raise ValueError("Incompatible dimension for X and Y matrices: "
"X.shape[1] == %d while Y.shape[1] == %d" % (
X.shape[1], Y.shape[1]))
return
Links to the raise (1)
https://github.com/scikit-learn/scikit-learn/blob/c67518350f91072f9d37ed09c5ef7edf555b6cf6/sklearn/metrics/pairwise.py#L153Ways to fix
This happens when there is shape mismatch between X and Y while computing pairwise_distances.
This particular error is raised when the metrics parameter is set to "precomputed"
How to reproduce the error:
import numpy as np
from sklearn.metrics import pairwise_distances
from sklearn.metrics.pairwise import pairwise_kernels
X = np.array([[2, 3], [3, 5], [5, 8],[0, 3]])
Y = np.array([[1, 1,0], [2, 1,1],[2, 1,1]])
result = pairwise_distances(X, Y,metric="precomputed")
print(result)
Output (the error):
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-21-dc2f26e5b1fb> in <module>()
4 X = np.array([[2, 3], [3, 5], [5, 8],[0, 3]])
5 Y = np.array([[1, 1,0], [2, 1,1],[2, 1,1]])
----> 6 result = pairwise_distances(X, Y,metric="precomputed")
7 print(result)
/usr/local/lib/python3.7/dist-packages/sklearn/metrics/pairwise.py in pairwise_distances(X, Y, metric, n_jobs, force_all_finite, **kwds)
1715 if metric == "precomputed":
1716 X, _ = check_pairwise_arrays(X, Y, precomputed=True,
-> 1717 force_all_finite=force_all_finite)
1718
1719 whom = ("`pairwise_distances`. Precomputed distance "
/usr/local/lib/python3.7/dist-packages/sklearn/metrics/pairwise.py in check_pairwise_arrays(X, Y, precomputed, dtype, accept_sparse, force_all_finite, copy)
149 "(n_queries, n_indexed). Got (%d, %d) "
150 "for %d indexed." %
--> 151 (X.shape[0], X.shape[1], Y.shape[0]))
152 elif X.shape[1] != Y.shape[1]:
153 raise ValueError("Incompatible dimension for X and Y matrices: "
ValueError: Precomputed metric requires shape (n_queries, n_indexed). Got (4, 2) for 3 indexed.
How to Fix:
The X.shape[1] and Y.shape[0] should be the same doing precomputed pairwise distance.
import numpy as np
from sklearn.metrics import pairwise_distances
from sklearn.metrics.pairwise import pairwise_kernels
X = np.array([[2, 3], [3, 5], [5, 8],[0, 3]])
Y = np.array([[1, 1], [2, 1]])
result = pairwise_distances(X, Y,metric="precomputed")
print(result)
Output (expected):
[[2. 3.] [3. 5.] [5. 8.] [0. 3.]]
Add a possible fix
Please authorize to post fix