python - 内存不足:np.meshgrid
问题描述
我正在努力解决与 Matplotlib 和 Numpy 相关的问题。
我正在尝试在我的地块上创建山体阴影。
我的输入数据是来自 LiDAR的不规则间距的 XYZ 点。
我可以生成 trisurf3D 图或 3Dscatter没问题。保存它,更改摄像机角度,根据 Z 对其进行着色并为其设置动画,但对于我的生活,我根本无法获得任何类型的阴影。
我被困在Matplotlib 中,需要 X 和 Y 和 Z 的二维数组。老实说,我的输入数据很小:376704 个点,每个点都有一个 XYZ 值。我已将点转换为从 0 开始的欧几里得坐标系:
from laspy.file import File as LAS
import numpy as np
def lasToNumpy(lasFile):
f = LAS(lasFile,mode='r')
## Establish min values
xmin = min(f.x)
ymin = min(f.y)
zmin = min(f.z)
## Arrays now in meters from 0 to max
x = np.array(f.x-xmin)
y = np.array(f.y-ymin)
z = np.array(f.z-zmin)
## Assign a max of each x and y
xmax = max(x)
ymax = max(y)
问题是我的下一步是创建一个网格网格(似乎需要生成一个二维数组)。这会消耗大约 50GB 的 RAM:
X, Y = np.meshgrid(x,y)
理所当然地。
我想要做的就是在我的表面上添加山体阴影,但整个 2D 阵列似乎在逻辑上是不必要的!我在这里有什么选择?这不会发生吗?作为参考,我的 trisurf3D 工作正常:
fig = plt.figure(figsize=(60.0,60.0))
ax = fig.add_subplot(111, projection='3d')
ax.plot_trisurf(x,y,z, cmap='plasma', edgecolor='black', alpha=0.5)
真的很想在那里放一些山丘阴影。
解决方案
这个问题现在可能已经过时了,但对于其他用户来说,这里的问题是您正在尝试使用np.meshgrid
. 的目的np.meshgrid
是获取 x 和 y 范围并创建一个网格。例如:
x=np.arange(0,100) #1D array
y=np.linspace(-50,50,1111) # 1D array
xgrid,ygrid=np.meshgrid(x,y) #Outputs 2D arrays
仅np.meshgrid
在您想对数据进行网格化时使用。您可以使用 3D 插值器将数据网格化到较低的分辨率,这RegularGridInterpolator
是解决问题和创建小山的一种方法。
在我看来,一个更快更好的选择是使用tricontourf
. 该函数接受您必须创建所需的山体阴影图形的一维数组。如果您无法使其正常工作,请使用一些数据更新您的问题。
推荐阅读
- javascript - 功能问题
- php - 简单的 html dom:通过匹配标签内的文本来查找元素
- cassandra - 我无法在我的 Windows 上运行 Apache Cassandra
- bash - N次重复后脚本导出重复项
- django - 有没有一种方法可以通过一个请求来优化 Django 中用户(也是另一个模型的一部分)的创建和检索?
- javascript - Onclick 事件打开一个新页面并通过使用 javascript 执行 api 调用来加载表
- javascript - 在 Object 的情况下,Javascript 重新分配和引用如何工作?需要深入解释吗?
- html - How can I get my AdRotator ads to stay within the div?
- python - 按数字顺序对文件进行排序,同时排除具有非数字文件名的文件
- swift - 我不小心隐藏了更改并将我的 Xcode 项目恢复到旧版本。如何将其还原为我隐藏的更改?