Skip to content

Commit 314e1c7

Browse files
committed
Try pass in distance array to linkage method
1 parent 5c52e23 commit 314e1c7

File tree

3 files changed

+8
-7
lines changed

3 files changed

+8
-7
lines changed

src/ert/analysis/misfit_preprocessor.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,12 @@ def cluster_responses(
5656
Cluster responses using hierarchical clustering based on Spearman correlation.
5757
Observations that tend to vary similarly across different simulation runs will be clustered together.
5858
"""
59-
correlation = spearmanr(responses).statistic
60-
if isinstance(correlation, np.float64):
61-
correlation = np.array([[1, correlation], [correlation, 1]])
62-
linkage_matrix = linkage(correlation, "average", "euclidean")
59+
distance = 1 - np.abs(spearmanr(responses).statistic)
60+
if isinstance(distance, np.float64):
61+
distance = np.array(distance)
62+
linkage_matrix = linkage(
63+
distance[np.triu_indices(distance.shape[0], k=1)], "average", "euclidean"
64+
)
6365
return fcluster(linkage_matrix, nr_clusters, criterion="maxclust", depth=2)
6466

6567

tests/ert/unit_tests/analysis/test_es_update.py

-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ def obs() -> polars.DataFrame:
5959

6060

6161
@pytest.mark.integration_test
62-
@pytest.mark.flaky(reruns=5)
6362
@pytest.mark.parametrize(
6463
"misfit_preprocess", [[["*"]], [], [["FOPR"]], [["FOPR"], ["WOPR_OP1_1*"]]]
6564
)

tests/ert/unit_tests/analysis/test_misfit_preprocessor.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ def test_misfit_preprocessor(nr_observations):
6868
nr_realizations = 1000
6969
Y = np.ones((nr_observations, nr_realizations))
7070
parameters_a = rng.standard_normal(nr_realizations)
71-
parameters_b = rng.standard_normal(nr_realizations)
71+
parameters_b = rng.normal(scale=5, size=nr_realizations)
7272
for i in range(nr_observations - 1):
7373
Y[i] = i + 1 * parameters_a
7474
Y[-1] = 5 + 1 * parameters_b
75-
obs_errors = Y.mean(axis=1)
75+
obs_errors = np.array([0.1] * nr_observations)
7676
Y_original = Y.copy()
7777
obs_error_copy = obs_errors.copy()
7878
result, *_ = main(Y, obs_errors)

0 commit comments

Comments
 (0)