使用集合中的组件创建矢量的三维numpy数组



我有一个浮动列表x1,。。。,xN。我想创建维度为NxNxN的3D numpy数组,使得元素I,j,k是三元素元组x_I,x_j,x_k。所以它是一个立方体,每个网格点都定义了一个向量。

示例:如果x1,。。。,xN=0,1我想要创建的2x2x2网格是

layer 0: 
(0,0,0), (1,0,0)
(0,1,0), (1,1,0)
layer 1: 
(0,0,1), (1,0,1)
(0,1,1), (1,1,1)

如果x1,。。。,xN是0,。。。,N-1,那么这很容易实现:

np.indices((N,N,N)).swapaxes(0,3).swapaxes(0,1).swapaxes(1,2)

对于一般列表x1,。。。,xN,创建所需阵列的最快方法是什么?

我特别感兴趣的是N=2k和x1,。。。,xN是0,1,。。。,k-1,-k,-k+1-1此排序来自numpy.fft如何返回fft的频率。

对于特定的x1,。。。,xN你可以使用上面的代码行,然后逐个分量地对向量进行适当的移位,但我不确定这是最快的方法,以及如何以最快的方式进行这些移位。

创建索引(np.indices((N,N,N))(在这里花费了大部分时间,我没有找到更快的方法来创建索引(例如meshgrid要慢得多(。

我建议的只是稍微快一点的转座方式(建议这样做更多是为了干净的代码(:

np.indices((N,N,N)).transpose(1, 2, 3, 0)

如果你经常创建这样一个索引网格,你总是可以缓存你的结果,然后再使用它们。

最新更新