dask中的np.fill_diagonal等效项

时间:2018-08-06 18:35:05

标签: python numpy dask

我有一个相关矩阵,其中我使用np.fill_diagonal用1填充对角线,然后使用np.triu取上三角形。 但是对于相关矩阵,我使用的是dataframe.corr,它为超过5000的列数给出了存储错误。 因此,我先创建一个dask数据框,然后使用corr来计算相关矩阵。

但是,我不能以对角线复制fill_diagonal和np.triu。 有人可以帮我吗?

下面是示例数据和预期输出的快照。我还放置了当前使用的python代码以实现预期的输出。我的目标是尽快进行这些操作,以避免大数据框(500万条记录和5800+列)的内存错误并计算结果。 该代码是一个较大的功能的一部分,该功能可以从数据中删除多共线变量,并且可以快速复制。

input

h_id    cu_id   tax     rev_m1      io_m1
0       0       0       0           0
0       0       0       1           0
0       0       1       0           -1
-1      1       0       0           1
1       0       0       0           -1
0       0       0       0           0
0       0       0       0           -1
1       0       0       -1          0
-1      1       0       0           0
0       0       0       0           -1

python code to acheive the desired output:

column_names = data.columns
#Create covariance matrix
correlation_matrix = data.corr()

print('*'*10 + "\nDone creating correlation matrix of standardized X.")
print(datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S'))
#Save the Covariance Matrix to a CSV
df_correlation_matrix = pd.DataFrame(correlation_matrix, columns = column_names, index = column_names)

np.fill_diagonal(df_correlation_matrix.values, 1)

# Writing values from upper triangle of the correlation matrix to new data frame
df1 = df_correlation_matrix.where(np.triu(np.ones(df_correlation_matrix.shape)).astype(bool)).stack().reset_index()

df1.columns = ['Variable1','Variable2','Value']
df1.drop(df1[df1.Variable1 == df1.Variable2].index, inplace=True)


Expected output:
Variable1   Variable2   Value
h_id        cu_id       -0.79
h_id        tax         0.0
h_id        rev_m1      -0.35
h_id        io_m1       -0.49
cu_id       tax         -0.16
cu_id       rev_m1      0.0
cu_id       io_m1       0.62
tax         rev_m1      0.0
tax         io_m1       -0.36
rev_m1      io_m1       0.0

0 个答案:

没有答案