假设我有三个任意一维数组,例如:
x_p = np.array((1.0, 2.0, 3.0, 4.0, 5.0))
y_p = np.array((2.0, 3.0, 4.0))
z_p = np.array((8.0, 9.0))
这三个数组表示 3D 网格中的采样间隔,我想为所有交叉点构造一个 3D 向量的 1D 数组,例如
points = np.array([[1.0, 2.0, 8.0],
[1.0, 2.0, 9.0],
[1.0, 3.0, 8.0],
...
[5.0, 4.0, 9.0]])
订单实际上并不重要。生成它们的明显方法:
npoints = len(x_p) * len(y_p) * len(z_p)
points = np.zeros((npoints, 3))
i = 0
for x in x_p:
for y in y_p:
for z in z_p:
points[i, :] = (x, y, z)
i += 1
所以问题是......有没有更快的方法?我看过但没有找到(可能只是找不到正确的 Google 关键字)。
我目前正在使用这个:
npoints = len(x_p) * len(y_p) * len(z_p)
points = np.zeros((npoints, 3))
i = 0
nz = len(z_p)
for x in x_p:
for y in y_p:
points[i:i+nz, 0] = x
points[i:i+nz, 1] = y
points[i:i+nz, 2] = z_p
i += nz
但我觉得我错过了一些聪明花哨的 Numpy 方式?