我正在尝试遵循有关xarray
文档的教程:http: //xarray.pydata.org/en/stable/dask.html#automatic-parallelization
我的最终目标是从具有约 100,000 个属性的数据集中获得成对的 spearman 相关矩阵,这使我学习了上述教程。我正在iris dataset
从 from上测试实现,sklearn
但我遇到了问题,因为这种类型的并行化语法与joblib
.
我不知道如何获取下面的代码来制作一个成对的 spearman 相关矩阵,结果形状为(150,150)
. 我展示了一个这样做的例子,pandas
但这不是平行的,并且将永远在我的实际数据集上。
有谁知道如何调整此xarray
代码以创建对称相关度量?如果没有,有人可以指导我找到一种更好的方法来进行成对相似性测量。我知道,sklearns pairwise_distance
但我想知道这是否是唯一的实现?
import bottleneck
import pandas as pd
import xarray as xr
from sklearn.datasets import load_iris
X_iris = pd.DataFrame(load_iris().data,
index = ["iris_%d" % i for i in range(load_iris().data.shape[0])],
columns = [x.split(" (cm)")[0].replace(" ","_") for x in load_iris().feature_names])
da_iris = xr.DataArray(X_iris, dims=["samples", "attributes"])
def covariance_gufunc(x, y):
return ((x - x.mean(axis=-1, keepdims=True))
* (y - y.mean(axis=-1, keepdims=True))).mean(axis=-1)
def pearson_correlation_gufunc(x, y):
return covariance_gufunc(x, y) / (x.std(axis=-1) * y.std(axis=-1))
def spearman_correlation_gufunc(x, y):
x_ranks = bottleneck.rankdata(x, axis=-1)
y_ranks = bottleneck.rankdata(y, axis=-1)
return pearson_correlation_gufunc(x_ranks, y_ranks)
def spearman_correlation(x, y, dim):
return xr.apply_ufunc(
spearman_correlation_gufunc, x, y,
input_core_dims=[[dim], [dim]],
dask='parallelized',
output_dtypes=[float])