我有一个二维数据数组,我试图以有效的方式获得有关其中心值的轮廓。所以输出应该是两个一维数组:一个是距离中心的距离值,另一个是原始2D中距中心距离的所有值的均值。具有浮点索引的二维矩阵的径向轮廓
每个索引与中心的距离都是非整数,这使我无法使用一些已知的解决方案解决问题。请允许我解释一下。
考虑这些矩阵
data = np.random.randn(5,5)
L = 2
x = np.arange(-L,L+1,1)*2.5
y = np.arange(-L,L+1,1)*2.5
xx, yy = np.meshgrid(x, y)
r = np.sqrt(xx**2. + yy**2.)
所以矩阵是
In [30]: r
Out[30]:
array([[ 7.07106781, 5.59016994, 5. , 5.59016994, 7.07106781],
[ 5.59016994, 3.53553391, 2.5 , 3.53553391, 5.59016994],
[ 5. , 2.5 , 0. , 2.5 , 5. ],
[ 5.59016994, 3.53553391, 2.5 , 3.53553391, 5.59016994],
[ 7.07106781, 5.59016994, 5. , 5.59016994, 7.07106781]])
In [31]: data
Out[31]:
array([[ 1.27603322, 1.33635284, 1.93093228, 0.76229675, -0.00956535],
[ 0.69556071, -1.70829753, 1.19615919, -1.32868665, 0.29679494],
[ 0.13097791, -1.33302719, 1.48226442, -0.76672223, -1.01836614],
[ 0.51334771, -0.83863115, -0.41541794, 0.34743342, 0.1199237 ],
[-1.02042539, 0.90739383, -2.4858624 , -0.07417987, 0.90748933]])
对于这种情况,期望的输出应当是array([ 0. , 2.5 , 3.53553391, 5. , 5.59016994, 7.07106781])
对于距离的指数,和相同的长度的第二阵列与平均所有相应距离的值:array([ 0.98791323, -0.32496927, 0.37221219, -0.6209728 , 0.27986926, 0.04060628])
。
从this answer有一个非常好的函数来计算关于任意点的轮廓。但是,他的方法存在的问题是它通过索引距离接近距离r
。因此,对于我来说,他的r
会是这样:
array([[2, 2, 2, 2, 2],
[2, 1, 1, 1, 2],
[2, 1, 0, 1, 2],
[2, 1, 1, 1, 2],
[2, 2, 2, 2, 2]])
这对我来说是一个相当大的差异,因为我小的矩阵工作。然而,这个近似值允许他使用np.bincount
,这非常方便(但对我来说不起作用)。
我一直在试图扩大这个浮动距离,就像我的版本r
,但到目前为止没有运气。 bincount
不适用于花车,histogram
需要等距箱,但情况并非如此。任何建议?
如何使用'((xx ** 2。+ yy ** 2。)/ 6.25).astype(int)'作为bincount的bin? – Divakar
或在'r'上使用'np.digitize'。 –
@PaulPanzer我不明白如何使用数字化来做到这一点。谨慎提供一个例子? – TomCho