3 回答

TA貢獻1804條經驗 獲得超8個贊
tl;dr:不,不是沒有改變你的問題的一些條件。
你所看到的人工制品是轉變的一個屬性。這并不是由于所有半徑的角度具有固定的分辨率。因此,這不是由于轉換的錯誤或不良實現。笛卡爾格網只是意味著這些區域具有更高的特殊分辨率,因為極地圖中存在已解析的點。
處理這個問題的唯一“干凈”方法(我現在能想到的)是在極坐標中具有可調節的分辨率,以考慮1 / r縮放。(如果輸入數據允許)
一種有點作弊的可視化方式是沒有間隙,將它們隨機分布在間隙上。這里的論點是,你沒有決心決定他們從哪個箱子開始。因此,您可以隨機將它們放入一個可能是可能的起源中,而不是將它們全部扔在同一個中(就像您現在所做的那樣)。但是,我想勸阻這種詭計。它只是給你一個更漂亮的情節。請注意,這在某種程度上等同于問題中右上角繪圖的行為。

TA貢獻1752條經驗 獲得超4個贊
這并沒有真正給出預期的結果,但也許會幫助你在一些需要的糾正后實現解決方案......
import numpy as np
radius = np.linspace(0, 1, 50)
angle = np.linspace(0, 2*np.pi, radius.size)
r_grid, a_grid = np.meshgrid(radius, angle)
data = np.sqrt((r_grid/radius.max())**2
+ (a_grid/angle.max())**2)
def polar_to_cartesian(data):
new = np.zeros_like(data) * np.nan
x = np.linspace(-1, 1, new.shape[1])
y = np.linspace(-1, 1, new.shape[0])
for i in range(new.shape[0]):
for j in range(new.shape[1]):
x0, y0 = x[j], y[i]
r, a = np.sqrt(x0**2 + y0**2), np.arctan2(y0, x0)
data_i = np.argmin(np.abs(a_grid[:, 0] - a))
data_j = np.argmin(np.abs(r_grid[0, :] - r))
val = data[data_i, data_j]
if r <= 1:
new[i, j] = val
return new
new = polar_to_cartesian(data)
fig, ax = plt.subplots()
ax.imshow(new, origin='lower')

TA貢獻1864條經驗 獲得超2個贊
您可以遍歷笛卡爾數組,將每個網格點轉換為極坐標,并通過從極坐標數據中插值來近似函數值。不過,您可能仍希望將角落區域留空,因為缺少足夠接近的數據。
我不認為有更好的方法,除非你當然可以訪問原始功能。
添加回答
舉報