python - 均匀采样的 3D 网格网格
问题描述
我有一个使用以下代码生成的 3 维网格网格:
x = np.linspace(-1,1,100)
xx, yy, zz = np.meshgrid(x, x, x)
这会生成一个 100 x 100 x 100 点的 3-d 点网格。我想绘制同一网格的均匀空间子采样,而不必生成新网格。我的方法是使用np.linspace()
从原始数组中获取 10000 个均匀空间索引的数组来绘制xx[subsample]
、、yy[subsample]
和zz[subsample]
。我用了
subsample = np.linspace(0,len(xx.flatten())-1,10000,dtype=int)
但是,当我将此数组传递给我的绘图函数时,我会在 3 维中得到不均匀的结构(对角线):
我的猜测是发生这种情况是因为我展平了数组,然后使用了np.linspace()
,但我无法弄清楚如何在 3 维中对网格进行采样并使其均匀分布。如果可能的话,我想避免生成新的网格。
我的问题是如何均匀地对原始 3 维网格网格进行二次采样,而无需生成新的网格网格?
解决方案
In [117]: x = np.linspace(-1,1,100)
...: xx, yy, zz = np.meshgrid(x, x, x)
In [118]: xx.shape
Out[118]: (100, 100, 100)
中的 1000 个等距点xx
,对于所有其他网格类似:
In [119]: xx[::10,::10,::10].shape
Out[119]: (10, 10, 10)
或使用高级索引(制作副本)
In [123]: i=np.arange(0,100,10)
In [124]: xx[np.ix_(i,i,i)].shape
Out[124]: (10, 10, 10)
我认为我们可以np.ravel_multi_index
用来获得一系列扁平索引。我们必须生成 1000 个索引元组才能做到这一点!
我不明白我们怎么能得到 10,000 分。 ::5
会给8000分。
推荐阅读
- java - 辅助函数可以在 Java 中节省内存吗?
- ios - github SwiftSocket 不在 iOS 设备上执行
- swift - 错误:无法识别的选择器,但我的插座似乎是正确的
- c# - C# 反射 Type.GetField 数组
- google-apps-script - 拆分并重复
- java - 如何检查用户是否在 Android 中有有效订阅?
- python - 将 Pandas Dataframe 中的时间戳转换为相应的工作日
- r - R plotly`event_data`不会在闪亮的应用程序中返回`key`/`customdata`
- c - win32 覆盖最大化窗口标题的大小
- javascript - React JS:在 URL 单击时从一个组件重定向到另一个组件的正确方法