python - 如何生成 3D 矢量网格? (3D网格中的每个位置都是一个向量)

标签 python numpy vector grid numpy-ndarray

我想生成一个维度为(dim,N,N,N)的四维数组。第一个分量ndim =3,N对应于网格长度。如何使用 python 优雅地生成这样一个数组?

这是我的“丑陋”实现:

qvec=np.zeros([ndim,N,N,N])  

freq   = np.arange(-(N-1)/2.,+(N+1)/2.)
x, y, z = np.meshgrid(freq[range(N)], freq[range(N)], freq[range(N)],indexing='ij')

qvec[0,:,:,:]=x
qvec[1,:,:,:]=y
qvec[2,:,:,:]=z

最佳答案

您的实现对我来说看起来足够好。不过,这里有一些改进可以使其更漂亮:

qvec=np.empty([ndim,N,N,N])  

freq   = np.arange(-(N-1)/2.,+(N+1)/2.)
x, y, z = np.meshgrid(*[freq]*ndim, indexing='ij')

qvec[0,...]=x   # qvec[0] = x
qvec[1,...]=y   # qvec[1] = y
qvec[2,...]=z   # qvec[2] = z

改进是:

  • 使用numpy.empty()代替numpy.zeros()
  • 摆脱 range(N) 索引,因为这会给出相同的 freq 数组
  • 使用可迭代解包并利用 ndim
  • 使用省略号表示尺寸(这也不是必需的)

因此,在合并上述所有要点之后,下面的代码就足够了:

qvec=np.empty([ndim,N,N,N])  
freq   = np.arange(-(N-1)/2.,+(N+1)/2.)
x, y, z = np.meshgrid(*[freq]*ndim, indexing='ij')    
qvec[0:ndim] = x, y, z

注意:我假设 N 是相同的,因为您使用了相同的变量名称。

关于python - 如何生成 3D 矢量网格? (3D网格中的每个位置都是一个向量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56044793/

相关文章:

matlab - 如何 append 到 Octave 中的矢量?

python - 如何使用 Python 列表?

Python将html插入MySQL

python - 在 python 中转发属性查找

java - 删除元素 vector java

c++ - 使用 std::sort() 对对象 vector 进行排序

python - Pandas 数据帧到 CSV

python - 如何使用 Python/Pandas 将数据框的其他行合并到当前行

python - 通过压缩将 2 个 numpy 维度 reshape 为一个维度?

python - Numpy 列栈 (46020, 369) (46020,) (46020,) (46020,)