将两个 2D 数据集组合成具有共享比例的单个二维直方图矩阵
Combine two 2D Datasets in single bi-dimensional histogram matrix with shared scale
我有两个数据集 d1,d2
填充了不同比例的二维数据。
import numpy as np
d1 = np.random.normal(-30,20,(500,2))
d2 = np.random.normal(-40,10,(500,2))
此外,我能够从每个单独的数据集创建单独的 100 x 100
二维直方图(=灰度图像)。
bins = [100,100]
h1 = np.histogram2d(d1[:,0], d1[:,1], bins)[0]
h2 = np.histogram2d(d2[:,0], d2[:,1], bins)[0]
但是使用此解决方案,每个 2D 直方图都以其自身的均值为中心,并且当将两个直方图绘制在彼此之上时,它们似乎分布在同一中心周围,这实际上是不正确的。
我想要得到的是一个单一的100 x 100 x 2
historgam矩阵(相当于一个2通道图像),它考虑到了数据的不同尺度,所以位移不会丢失。
如果您传递 histogram2d
一个值 bins=[100, 100]
,您要求它在每个维度中自动计算 100 个 bin。你可以自己做,所以这两个
bins = [
np.linspace(x.min(), x.max(), 100),
np.linspace(y.min(), y.max(), 100)
]
h1 = np.histogram2d(x, y, bins)
和
bins = [100, 100]
h1 = np.histogram2d(x, y, bins)
是等价的。
知道了,我们现在可以计算两个数组组合的 bin 范围,并使用它们
bins = [
np.linspace(
min(d1[:, 0].min(), d2[:, 0].min()),
max(d1[:, 0].max(), d2[:, 0].max()),
100
),
np.linspace(
min(d1[:, 1].min(), d2[:, 1].min()),
max(d1[:, 1].max(), d2[:, 1].max()),
100
)
]
h1 = np.histogram2d(d1[:,0], d1[:,1], bins)
h2 = np.histogram2d(d2[:,0], d2[:,1], bins)
或者将两个数据集叠加在一起,稍微简化一下代码
d = np.stack((d1, d2))
bins = [
np.linspace(d[..., 0].min(), d[..., 0].max(), 100),
np.linspace(d[..., 1].min(), d[..., 1].max(), 100),
]
h1 = np.histogram2d(d[0, :, 0], d[0, :, 1], bins)
h2 = np.histogram2d(d[1, :, 0], d[1, :, 1], bins)
我有两个数据集 d1,d2
填充了不同比例的二维数据。
import numpy as np
d1 = np.random.normal(-30,20,(500,2))
d2 = np.random.normal(-40,10,(500,2))
此外,我能够从每个单独的数据集创建单独的 100 x 100
二维直方图(=灰度图像)。
bins = [100,100]
h1 = np.histogram2d(d1[:,0], d1[:,1], bins)[0]
h2 = np.histogram2d(d2[:,0], d2[:,1], bins)[0]
但是使用此解决方案,每个 2D 直方图都以其自身的均值为中心,并且当将两个直方图绘制在彼此之上时,它们似乎分布在同一中心周围,这实际上是不正确的。
我想要得到的是一个单一的100 x 100 x 2
historgam矩阵(相当于一个2通道图像),它考虑到了数据的不同尺度,所以位移不会丢失。
如果您传递 histogram2d
一个值 bins=[100, 100]
,您要求它在每个维度中自动计算 100 个 bin。你可以自己做,所以这两个
bins = [
np.linspace(x.min(), x.max(), 100),
np.linspace(y.min(), y.max(), 100)
]
h1 = np.histogram2d(x, y, bins)
和
bins = [100, 100]
h1 = np.histogram2d(x, y, bins)
是等价的。
知道了,我们现在可以计算两个数组组合的 bin 范围,并使用它们
bins = [
np.linspace(
min(d1[:, 0].min(), d2[:, 0].min()),
max(d1[:, 0].max(), d2[:, 0].max()),
100
),
np.linspace(
min(d1[:, 1].min(), d2[:, 1].min()),
max(d1[:, 1].max(), d2[:, 1].max()),
100
)
]
h1 = np.histogram2d(d1[:,0], d1[:,1], bins)
h2 = np.histogram2d(d2[:,0], d2[:,1], bins)
或者将两个数据集叠加在一起,稍微简化一下代码
d = np.stack((d1, d2))
bins = [
np.linspace(d[..., 0].min(), d[..., 0].max(), 100),
np.linspace(d[..., 1].min(), d[..., 1].max(), 100),
]
h1 = np.histogram2d(d[0, :, 0], d[0, :, 1], bins)
h2 = np.histogram2d(d[1, :, 0], d[1, :, 1], bins)