我有一個二維數據數組,我試圖以有效的方式獲得有關其中心值的輪廓。所以輸出應該是兩個一維數組:一個是距離中心的距離值,另一個是原始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