python - 从三个 1D 数组创建 3D 坐标的 numpy 数组,第一个索引变化最快

标签 python numpy

类似于问题here 我有三个任意一维数组,例如:

x_p = np.array((0.0,1.1, 2.2, 3.3, 4.4))
y_p = np.array((5.5,6.6,7.7))
z_p = np.array((8.8, 9.9))

我需要

points = np.array([[0.0, 5.5, 8.8],
                   [1.1, 5.5, 8.8],
                   [2.2, 5.5, 8.8],
                   ...
                   [4.4, 7.7, 9.9]])

1) 第一个索引变化最快。2) 点是浮点坐标,而不是整数索引。 3)我注意到从版本1.7.0开始,numpy.meshgrid已经改变了默认indexing='xy'的行为,并且需要使用

np.vstack(np.meshgrid(x_p,y_p,z_p,indexing='ij')).reshape(3,-1).T

获取最后一个索引快速变化的结果点,这不是我想要的。(从1.7.0开始才提到,meshgrid支持维度>2,我没有检查)

最佳答案

我通过一些尝试和错误发现了这一点。

我认为 ij v xy 索引一直在 meshgrid 中(这是更新的 sparse 参数) )。它只影响 3 个返回元素的顺序。

为了让 x_p 变化最快,我将其放在参数列表的最后,然后使用 ::-1 反转末尾的列顺序。

我使用 stack 在最后将数组连接到新轴上,因此不需要转置。但 reshape 和转置都很便宜(时间方面)。因此它们可以以任何有效且易于理解的组合使用。

In [100]: np.stack(np.meshgrid(z_p, y_p, x_p, indexing='ij'),3).reshape(-1,3)[:,::-1]
Out[100]: 
array([[ 0. ,  5.5,  8.8],
       [ 1.1,  5.5,  8.8],
       [ 2.2,  5.5,  8.8],
       [ 3.3,  5.5,  8.8],
       [ 4.4,  5.5,  8.8],
       [ 0. ,  6.6,  8.8],
       ...
       [ 2.2,  7.7,  9.9],
       [ 3.3,  7.7,  9.9],
       [ 4.4,  7.7,  9.9]])

关于python - 从三个 1D 数组创建 3D 坐标的 numpy 数组,第一个索引变化最快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45391740/

相关文章:

python - 在 postgresql django 中查询 JSONField 的另一种方法

python - 有没有办法用 psycopg2 询问用户是否输入密码?

python - 用向量 [n,] 填充逻辑矩阵 [r,n]

python - 如何使用OpenCV将图像的一部分复制到另一个?

python - Matlab 与 Python : Reshape

python - 使用滑动窗口和转置进行分组

python - 将击键发送到特定窗口(在后台),但同时做其他事情

Python 和 BS4 - 奇怪的行为,刮刀在一段时间后卡住/停止工作而没有错误

python - Python 中的 Excel 加载项

python - 我不明白使用 np.boxplot 获得 Q1 和 Q3 的结果