python - 我想设计一个具有 n 维数的网格,二维的解决方案是可用的,但我想要 Numpy 中的 n 维?
问题描述
我需要为具有一般/可变维数的数组生成网格。在 2D 情况下,我知道我可以使用 mgrid:
一些二维数据
N = 1000
x = np.random.uniform(0., 1., N)
y = np.random.uniform(10., 100., N)
xmin, xmax, ymin, ymax = x.min(), x.max(), y.min(), y.max()
获取二维网格
xy_grid = np.mgrid[xmin:xmax:10j, ymin:ymax:10j]
当维度数量可变时,如何扩展这种方法?即:我的数据可能是(x,y)或(x,y,z)或(x,y,z,q)等。
天真的方法:
Md_data.shape = (M, N),对于 M 维
dmin, dmax = np.amin(Md_data, axis=1), np.amax(Md_data, axis=1)
Md_grid = np.mgrid[dmin:dmax:10j]
不工作
解决方案
meshgrid
作为一个函数,我们可以使用 '*' 解包:
In [412]: dmin,dmax=np.array([1,2,3]), np.array([5,6,7])
In [423]: arr = np.linspace(dmin,dmax,5)
In [424]: arr
Out[424]:
array([[1., 2., 3.],
[2., 3., 4.],
[3., 4., 5.],
[4., 5., 6.],
[5., 6., 7.]])
我正在使用sparse
更紧凑的显示器。
In [425]: atup = np.meshgrid(*arr.T,indexing='ij',sparse=True)
In [426]: atup
Out[426]:
[array([[[1.]],
[[2.]],
[[3.]],
[[4.]],
[[5.]]]),
array([[[2.],
[3.],
[4.],
[5.],
[6.]]]),
array([[[3., 4., 5., 6., 7.]]])]
这ogrid
做同样的事情:
np.ogrid[1:5:5j,2:6:5j,3:7:5j]
想一想,原来如此
np.ix_(arr[:,0],arr[:,1],arr[:,2])
虽然它没有nonsparse
其他选择。
推荐阅读
- java - 需要了解 logstash 和 elk
- azure - 如何获取 terraform 计划以在集群内创建私有 AKS 集群和命名空间?
- terraform - Terraform Remote StateFile 用于相同配置的多个实例
- dropdown - Bootstrap 的导航栏下拉链接不起作用
- python - 将 pandas 列中的每个项目与另一个 df 相乘以生成新列
- apache-spark - 未为 spark-submit 加载 SQL 扩展
- azure - Cosmos DB 更改源源的 Azure 函数不会运行:找不到作业函数
- google-cloud-platform - BIGQUERY:连接谓词中的表不受支持的子查询
- android - 我没有在项目级别检索 build.gradle 文件
- reactjs - 当子组件失败时,React 错误边界没有捕获错误