簡體   English   中英

Python 中的曲面圖 - MemoryError

[英]Surface Plot in Python - MemoryError

我正在嘗試使用以下代碼使用坐標創建曲面圖:

from mpl_toolkits.mplot3d import Axes3D
from scipy.stats import gaussian_kde

fig = plt.figure()
ax = Axes3D(fig)
X = []
Y = []
XY = np.vstack([X, Y])
x, y = np.meshgrid(X, Y)
z = gaussian_kde(XY)(XY).tolist()
ax.plot_surface(x, y, z)
plt.show()

假設 X 和 Y 是浮點數的長列表。 但是,當我執行代碼時,我得到一個 MemoryError,它可以追溯到 meshgrid 方法: in meshgrid return [x * mult_fact for x in output]

有誰知道如何解決這個問題?

(當我通過編寫XY = np.vstack([X[0:10], Y[0:10]])x, y = np.meshgrid(X[0:10], Y[0:10])表面圖有效,但重疊。我想這是由於點沒有按順序繪制。有誰也知道如何解決這個問題?我是 Python 新手......)

您試圖繪制太多點。 要查看此示例,請提供一些假數據:

from mpl_toolkits.mplot3d import Axes3D
from scipy.stats import gaussian_kde
import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = Axes3D(fig)

npoints = 100
X = np.linspace(0, 1, npoints)
Y = np.sin(X)
XY = np.vstack([X, Y])
x, y = np.meshgrid(X, Y)
z = gaussian_kde(XY)(XY).tolist()
ax.plot_surface(x, y, z)
plt.show()

這將工作得很好,但是如果我們使npoints=10000那么(在我的機器上)我可以重現您的錯誤。

解決方案完全取決於XY是什么。 例如,如果它們是一些測量數據輸出,那么您需要問“我是否需要繪制所有這些數據?”的問題。 根據我的經驗,如果您嘗試繪制如此多的點以致出現內存錯誤,那么無論如何繪制時您將無法看到所有數據! 因此,您可以對其進行下采樣,只需選擇每個第n個點即可。 首先,我建議將XY變成numpy數組

import numpy as np
X = np.array(X)
Y = np.array(Y)

然后,要獲得每 100 個點,請執行以下操作:

X = X[::100]
Y = Y[::100]

有關數組切片和索引的更多信息, 請參閱文檔

或者,您可能會覺得這“丟失”了一些有價值的信息,在這種情況下,您可以應用滾動窗口平均值,然后分別考慮每個窗口中的變化,以檢查您沒有遺漏任何內容。 最終這一切都取決於數據是什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM