我正在尝试在给定两个相同大小的数据样本的情况下获得经验二维 CDF 的矩阵表示。
我有两个相同大小的排序数据样本:
sorted_sample1
和 sorted_sample2
。我想要一个代表其二维经验累积分布函数的矩阵。目前我有
hist_values, x_edges, y_edges = np.histogram2d(sorted_sample1, sorted_sample2,density = True, bins=[num_bins_x, num_bins_y], range=bin_range)
这给了我一个二维经验 PDF。如果这是一维的,那么我会将
np.sumsum
应用于我的经验 pdf,然后标准化以获得 CDF。但是,我不确定如何处理 2D 情况。我想出的两个选择是:
np.cumsum
沿一个轴,然后沿另一轴。但这感觉不对,我想知道轴的顺序是否重要: cumsum_x = np.cumsum(hist_values1, axis=0)
后跟 cumsum1_xy = np.cumsum(cumsum1_x, axis=1)
。然后我就可以正常化了
解开我的二维矩阵并将 cumsum 应用于其中,然后重塑它:
`cumsum = np.cumsum(hist_values.ravel()).reshape(hist_values1.shape)
。然后我就可以正常化了
这些选项是否正确?如果不正确是什么?谢谢
好的,这是简单的说明。具有一定相关性的二维高斯。运行代码两次,一次不排序,一次排序。你可以看到排序破坏了你的依赖
import numpy as np
from matplotlib import pyplot as plt
mean = [0, 0]
cov = [[1, 1.2], [1.2, 3]] # diagonal covariance
x, y = np.random.multivariate_normal(mean, cov, 1000).T
#x = np.sort(x)
plt.plot(x, y, '.')
plt.axis('equal')
plt.show()