python - 使用集合中的组件创建 3D numpy 向量数组
问题描述
我有一个浮动列表 x1,...,xN。我想创建维度为 NxNxN 的 3D numpy 数组,使得元素 i、j、k 是 3 元素元组 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)
如果您经常创建这样的索引网格,您总是可以缓存您的结果并在以后重新使用它们。
推荐阅读
- statistics - 比较平滑方法最合适的方法是什么?
- python - 有没有一种简单的方法可以找到声音信号中包络的频率?
- django - Django 表单仅在我按下提交按钮时显示
- authentication - Auth0 - 使用动态回调的 OAuth 登录
- forms - 发布请求后找不到 Flask 页面
- amazon-dynamodb - 按字符串数组搜索 DynamoDB 字符串集属性
- function - 如何在 foreach 并行循环中调用函数
- terraform - ECS集群基于CPU/内存的扩缩容任务
- certbot - Certbot 忽略 webroot 文件夹
- javascript - 在 ReactJS 中从 AD 合作伙伴加载外部脚本